symfony - 注册成功后如何分配角色?

标签 symfony controller fosuserbundle pugxmultiuserbundle

我正在使用 fos 用户包和 pugx 多用户包。
我已经阅读了所有文档并且我是 Symfony 的新手。
在 pugx 多用户包中,每个点都有一个示例,但有一个:成功注册。

  • 用于生成表单的覆盖 Controller 示例 => ok
  • 用于生成表单的覆盖模板示例 => ok
  • 覆盖成功注册示例的示例 => 无。

  • 这是我的代码:
    class RegistrationController extends BaseController
    {
        public function registerAction(Request $request)
        {   
            $response = parent::registerAction($request);
            return $response;
        }   
    
        public function registerTeacherAction()
        {   
            return $this->container
                ->get('pugx_multi_user.registration_manager')
                ->register('MyBundle\Entity\PersonTeacher');
        }   
    
        public function registerStudentAction()
        {   
            return $this->container
                ->get('pugx_multi_user.registration_manager')
                ->register('MyBundle\Entity\PersonStudent');
        }   
    }
    

    问题出在 ->get('pugx_multi_user.registration_manager')返回 经理 .在 fos user overring controllers help ,他们得到一个 form form.handler .我很难将那些与 pugx_multi_user 管理器“联系起来”。

    我应该在 registerTeacherAction() 中放入什么代码为教师设置角色,并在 registerStudentAction()为成功注册的学生设置角色?

    最佳答案

    解决方案 1(Doctrine 监听器/订阅者)

    您可以轻松添加教义 prePersist listener/subscriber在持久化之前,根据它们的类型将角色/组添加到您的实体。

    听者

    namespace Acme\YourBundle\EventListener;
    
    use Doctrine\ORM\Event\LifecycleEventArgs;
    use Acme\YourBundle\Entity\Student;
    
    class RoleListener
    {
        public function prePersist(LifecycleEventArgs $args)
        {
            $entity = $args->getEntity();
            $entityManager = $args->getEntityManager();
    
            // check for students, teachers, whatever ...
            if ($entity instanceof Student) {
                $entity->addRole('ROLE_WHATEVER');
                // or
                $entity->addGroup('students');
                // ...
            }
    
           // ... 
        }
    }
    

    服务配置
    # app/config/config.yml or load inside a bundle extension
    services:
        your.role_listener:
            class: Acme\YourBundle\EventListener\RoleListener
            tags:
                - { name: doctrine.event_listener, event: prePersist }
    

    解决方案 2(Doctrine LifeCycle 回调):

    使用 lifecycle callbacks您可以将角色/组操作直接集成到您的实体中。
    /**
     * @ORM\Entity()
     * @ORM\HasLifecycleCallbacks()
     */
    class Student
    {
        /**
         * @ORM\PrePersist
         */
        public function setCreatedAtValue()
        {
            $this->addRole('ROLE_WHATEVER');
            $this->addGroup('students');
        }
    

    解决方案 3(事件调度程序):

    "fos_user.registration.success" 注册事件监听器/订阅者事件。

    How to create an event listener/EventDispatcher成分。

    关于symfony - 注册成功后如何分配角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19321146/

    相关文章:

    Symfony2 - 可以学说 :migrations:diff create DB-agnostic code instead of SQL?

    symfony - FosUserBundle 不发送电子邮件来重置密码

    ruby-on-rails - 如何在 rspec Controller 测试期间记录 rails Controller 过滤器

    php - Yii 2,Active Record类保存后未获取ID

    php - 在 CakePHP 3 中获取当前操作

    facebook - Symfony HWIOAuthBundle 从 facebook 获取用户事件和喜欢

    php - Composer 冲突和 Symfony 3

    php - 在 symfony 实体中获取语言环境

    symfony - 如何使用symfony在实体类中调用学说

    php - Twig /Symfony 2.3.4 : Extending twig template stored in database