1
我試圖在註冊後爲每個用戶設置默認角色(ROLE_USER
)。我已經試過這樣的事情在FOS這個RegistrationController:在使用FOSUserBundle在Symfony中註冊後設置ROLE_USER
$user->setRoles(array('ROLE_USER'));
但在fos_users
表登記後,角色欄是空的。任何想法爲什麼?
我試圖在註冊後爲每個用戶設置默認角色(ROLE_USER
)。我已經試過這樣的事情在FOS這個RegistrationController:在使用FOSUserBundle在Symfony中註冊後設置ROLE_USER
$user->setRoles(array('ROLE_USER'));
但在fos_users
表登記後,角色欄是空的。任何想法爲什麼?
爲了能夠堅持在數據庫中的一個必要的默認角色覆蓋用戶:: setRoles()方法到您的用戶實體:
public function addRole($role)
{ $role = strtoupper($role);
if (!in_array($role, $this->roles, true)) {
$this->roles[] = $role;
}
return $this;
}
療法的2其他的想法做TRIC:
1)easyest方法是重寫實體構造:
public function __construct()
{
parent::__construct();
$this->roles = array('ROLE_USER'); }
2)第二個方法是將註冊事件監聽器在REGISTRATION_SUCCESS事件並使用$event->getForm()->getData()
訪問用戶,並修改它,看看:
// src/Acme/DemoBundle/EventListener/RegistrationListener.php
namespace Acme\DemoBundle\EventListener;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
enter code here
class RegistrationListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
);
}
public function onRegistrationSuccess(FormEvent $event)
{
$rolesArr = array('ROLE_USER');
/** @var $user \FOS\UserBundle\Model\UserInterface */
$user = $event->getForm()->getData();
$user->setRoles($rolesArr);
}
}
此外,需要按照如下方式註冊的服務:
// src/Acme/DemoBundle/Resources/config/services.yml
services:
demo_user.registration_listener:
class: Acme\DemoBundle\EventListener\RegistrationListener
arguments: []
tags:
- { name: kernel.event_subscriber }