Как добавить роль в группу с помощью конструктора - PullRequest
0 голосов
/ 28 октября 2019

Я пытался установить роль для каждой группы во время ее создания. Я думал, что использование __constructor будет хорошей идеей, но это не работает, ROLE_ADMIN не в новых группах. Я не знаю, что я делаю не так.

<?php
// src/AppBundle/Entity/Group.php
namespace AppBundle\Entity;

use FOS\UserBundle\Model\Group as BaseGroup;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\GroupRepository")
 * @ORM\Table(name="d0s_groups")
 */
class Group extends BaseGroup
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @Assert\NotBlank(
     *     message="Nazwa grupy nie może być pusta."
     * )
     * @Assert\Length(
     *      min = 3,
     *      max = 32,
     *      minMessage = "Nazwa grupy musi mieć conajmniej 3 znaki.",
     *      maxMessage = "Nazwa grupy może mieć maksymalnie 32 znaki."
     * )
     */
    protected $name;

    public function __construct($name, $roles = array())
    {
        parent::__construct($name, $roles);
        $this->addRole("ROLE_ADMIN");
    }

    public function getId() {
        return $this->id;
    }

    public function __toString()
    {
        return $this->getName();
    }
}

1 Ответ

0 голосов
/ 28 октября 2019

документация гласит, что лучше:

Конструктор объекта вызывается только тогда, когда you создает новый экземпляр с new ключевое слово. Doctrine никогда не вызывает конструкторы сущностей, поэтому вы можете использовать их по своему усмотрению и даже иметь аргументы любого типа.

source: https://www.doctrine -project.org / projects /doctrine-orm / en / 2.6 / reference / Architecture.html

По сути, если вы на самом деле не храните ролей в базе данных, ваш конструктор не имеет значения, когда загружается объектиз БДЕсть способы обойти это, вы можете переопределить свой метод getRoles, чтобы добавить туда дополнительную роль.

...