Php 在FOSUserBundle中,如何在注册\完成事件上初始设置用户角色?
我正在尝试为每个成功注册的用户分配一个Php 在FOSUserBundle中,如何在注册\完成事件上初始设置用户角色?,php,events,symfony,fosuserbundle,Php,Events,Symfony,Fosuserbundle,我正在尝试为每个成功注册的用户分配一个角色\u user角色。我是FOSUserBundle的新手,所以从我在文档中读到的内容来看,它是通过将逻辑绑定到控制器中来完成的 下面是我的NewUserGroupSet事件侦听器: <?php namespace Tsk\TstBundle\EventListener; use Doctrine\ODM\MongoDB\DocumentManager; use FOS\UserBundle\Doctrine\UserManager; use FO
角色\u user
角色。我是FOSUserBundle的新手,所以从我在文档中读到的内容来看,它是通过将逻辑绑定到控制器中来完成的
下面是我的NewUserGroupSet
事件侦听器:
<?php
namespace Tsk\TstBundle\EventListener;
use Doctrine\ODM\MongoDB\DocumentManager;
use FOS\UserBundle\Doctrine\UserManager;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\FOSUserEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class NewUserGroupSet implements EventSubscriberInterface
{
protected $um;
protected $dm;
public function __construct(UserManager $um, DocumentManager $dm)
{
$this->um = $um;
$this->dm = $dm;
}
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_COMPLETED => "onRegistrationSuccess",
);
}
public function onRegistrationSuccess(FilterUserResponseEvent $event)
{
$user = $event->getUser();
$user->setRoles(array('ROLE_USER'));
$this->um->updateUser($user);
$this->dm->flush();
}
}
?>
但是当我注册一个新用户时,什么也没发生。没有设置任何角色
任何帮助都将不胜感激。您是否尝试调用
addRole()
FOSUser entity函数,如果您注意到entity中的setRole函数,它将通过数组循环到roles并将其传递给addRole
public function setRoles(array $roles)
{
$this->roles = array();
foreach ($roles as $role) {
$this->addRole($role);
}
return $this;
}
对于单个角色,请尝试使用addRole()
public function onRegistrationSuccess(FilterUserResponseEvent $event)
{
$user = $event->getUser();
$user->addRole('ROLE_USER');
$this->um->updateUser($user);
$this->dm->flush();
}
@RafaelAdel仔细阅读了它的声明,默认情况下,创建的用户有role-role\u-user,它保存在DB-like空数组中,转换为JSON:0:{}尝试
var\u-dump($this->getRoles())
创建userAh后,我得到了它。我尝试添加ROLE\u ADMIN
ROLE,结果成功了。非常感谢你的努力。
public function onRegistrationSuccess(FilterUserResponseEvent $event)
{
$user = $event->getUser();
$user->addRole('ROLE_USER');
$this->um->updateUser($user);
$this->dm->flush();
}