很多人都知道,FOS 用户包不会在用户注册时自动提供角色。最常见的解决方案是 a) 修改 User 实体构造函数以自动分配角色,或 b) 覆盖整个注册控制器。
这些解决方案似乎都不完美,我想利用 FOS 用户包提供的事件。
我已经设法捕获了我想要的事件 ( FOSUserEvents::REGISTRATION_INITIALIZE
),但是我无法弄清楚如何将修改后的用户实体传递回注册表单。
我到目前为止的代码如下:
namespace HCLabs\UserBundle\EventListener;
use FOS\UserBundle\FOSUserEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use FOS\UserBundle\Event\UserEvent;
use FOS\UserBundle\Model\UserInterface;
class AutoRoleAssignmentListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [ FOSUserEvents::REGISTRATION_INITIALIZE => 'onRegistrationInitialise' ];
}
public function onRegistrationInitialise( UserEvent $event )
{
$user = $event->getUser();
$user->addRole( 'ROLE_USER' );
// what do
}
}
事件监听器的 YML:
services:
hc_labs_user.reg_init:
class: HCLabs\UserBundle\EventListener\AutoRoleAssignmentListener
tags:
- { name: kernel.event_subscriber }
如果需要更多代码,我很乐意提供。谢谢你的帮助。