加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读