php – 在FOSUserBundle中,如何在REGISTRATION_COMPLETED事件上
发布时间:2020-12-13 21:50:00 所属栏目:PHP教程 来源:网络整理
导读:我试图给每个成功注册的用户一个ROLE_USER角色.我是FOSUserBundle的新手,所以从我在文档中看到的内容来看,它是通过将逻辑插入控制器来完成的. 这是我的NewUserGroupSet事件监听器: ?phpnamespace TskTstBundleEventListener;use DoctrineODMMongoDBDoc
我试图给每个成功注册的用户一个ROLE_USER角色.我是FOSUserBundle的新手,所以从我在文档中看到的内容来看,它是通过将逻辑插入控制器来完成的.
这是我的NewUserGroupSet事件监听器: <?php namespace TskTstBundleEventListener; use DoctrineODMMongoDBDocumentManager; use FOSUserBundleDoctrineUserManager; use FOSUserBundleEventFilterUserResponseEvent; use FOSUserBundleFOSUserEvents; use SymfonyComponentEventDispatcherEventSubscriberInterface; 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: TskTstBundleEventListenerNewUserGroupSet 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(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |