Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在FOSUserBundle中,如何在注册\完成事件上初始设置用户角色?_Php_Events_Symfony_Fosuserbundle - Fatal编程技术网

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();
}