FOSUserBundle добавить группу не правильно вставить строку в MySQL DB

я пытаюсь включить групповую функцию fosuserbundle, следуя документу, который можно найти в gos fosuserbundle

RegistrationController:

//...
// I use the controller action to dump and test
// I created the group
//        $g = new Group('super_admin', array('ROLE_USER', 'ROLE_RESELLER', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN'));
//        $g1 = new Group('admin', array('ROLE_USER', 'ROLE_RESELLER', 'ROLE_ADMIN'));
//        $g2 = new Group('reseller', array('ROLE_USER', 'ROLE_RESELLER'));
//        $g3 = new Group('user', array('ROLE_USER'));
//
//        $em = $this->getDoctrine()->getEntityManager();
//        $em->persist($g);
//        $em->flush();
//        $em->persist($g1);
//        $em->flush();
//        $em->persist($g2);
//        $em->flush();
//        $em->persist($g3);
//        $em->flush();
$em = $this->getDoctrine()->getEntityManager();
$this->getUser()->addGroup($em->getRepository('vRonnUserBundle:Group')->findOneByName('super_admin'));
exit(var_dump($this->getUser()->getGroups()));

расслоение \ Entity \ User.php

use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

class User extends BaseUser {

//...

/*
* @ORM\ManyToMany(targetEntity="vRonn\UserBundle\Entity\Group", inversedBy="users")
* @ORM\JoinTable(name="fos_user_user_group",
*      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
*      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
protected $groups;

//...
public function __construct() {
parent::__construct();
// your own logic

//$this->groups = new ArrayCollection();
}

расслоение \ Entity \ Group.php

use FOS\UserBundle\Model\Group as BaseGroup;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="fos_group")
*/
class Group extends BaseGroup {

/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\ManyToMany(targetEntity="vRonn\UserBundle\Entity\User", mappedBy="groups")
*/
protected $users;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}

и я думаю, что таблица fos_user_user_group необходима для хранения записи группы пользователей, но она не существует, я гуглю вокруг и нет команды для ее создания, но я нашел структуру, поэтому я создаю ее вручную в phpmyadmin

CREATE TABLE IF NOT EXISTS `fos_user_user_group` (
`user_id` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`,`group_id`),
KEY `IDX_B3C77447A76ED395` (`user_id`),
KEY `IDX_B3C77447FE54D947` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

и, наконец, я думаю, что все готово, поэтому я пытаюсь сбросить на контроллере

$em = $this->getDoctrine()->getEntityManager();
$this->getUser()->addGroup($em->getRepository('vRonnUserBundle:Group')->findOneByName('admin'));
exit(var_dump($this->getUser()->getGroups()));

и там мой пользователь в группе admin, в конце концов???

но когда я попробую следующее

//        $em = $this->getDoctrine()->getEntityManager();
//        $this->getUser()->addGroup($em->getRepository('vRonnUserBundle:Group')->findOneByName('admin'));
exit(var_dump($this->getUser()->getGroups()));

и моя группа пуста, поэтому я проверяю db с помощью phpmyadmin, смотрю на группу fos_user_user_group, там 0 строк, что-то, что я пропустил? Группа добавления никогда не будет вставлена ​​в базу данных.

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

расслоение \ EventListener \ UserCreationListener.php

public function onRegistrationSuccess(FormEvent $event) {
$this->user = $event->getForm()->getData();
$group_name = 'user';
$entity = $this->em->getRepository('vRonnUserBundle:Group')->findOneByName($group_name); // You could do that by Id, too
$this->user->addGroup($entity);
$this->em->flush();
}

0

Решение

Наконец, я нашел решение, я забыл получить usermanager и updateuser

$em = $this->getDoctrine()->getEntityManager();
$this->getUser()->addGroup($em->getRepository('vRonnUserBundle:Group')->find(1));
$userManager = $this->get('fos_user.user_manager');
$userManager->updateUser($this->getUser());
exit(var_dump($this->getUser()->getGroups()->first()));

надеюсь кто-нибудь поможет когда-нибудь, подробнее о usermanager нажмите Вот

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]