![](/img/trans.png)
[英]Symfony2 FOSuserBundle event REGISTRATION_COMPLETED is not triggered
[英]In FOSUserBundle, How to initially set user role on REGISTRATION_COMPLETED event?
我試圖給每個成功注冊的用戶一個ROLE_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();
}
}
?>
並注冊為服務如下:
parameters:
tsk_user.group_set.class: Tsk\TstBundle\EventListener\NewUserGroupSet
services:
tsk_user.group_set:
class: %tsk_user.group_set.class%
arguments: [@fos_user.user_manager, @doctrine.odm.mongodb.document_manager]
tags:
- { name: kernel.event_subscriber }
但是當我注冊一個新用戶時,什么也沒發生。 沒有任何角色被設置。
任何幫助,將不勝感激。
您是否嘗試過調用addRole()
FOSUser實體函數,如果您注意到實體中的setRole函數,它會將數組循環到角色並將其傳遞給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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.