如何在成功注册时分配角色? [英] How to assign roles on successful registration?

查看:186
本文介绍了如何在成功注册时分配角色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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




  • em>生成表单=>确定

  • 重写模板样例



以下是我的代码:

  class RegistrationController extends BaseController 
{
public function registerAction(Request $ request)
{
$ response = parent :: registerAction请求);
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用户限制控制器帮助中,他们可以使用 form form.handler 。我很难把这些与pugx_multi_user管理器链接。



我应该在 registerTeacherAction c $ c>为教师设置角色,并在 registerStudentAction()中为学生在注册成功时设置角色? b $ b

解决方案

解决方案1(Doctrine Listener / Subscriber)






您可以轻松地添加一个doctrine prePersist



监听器/订阅者



 命名空间Acme \YourBundle\EventListener; 

使用Doctrine\ORM\Event\LifecycleEventArgs;
使用Acme \YourBundle\Entity\Student;

class RoleListener
{
public function prePersist(LifecycleEventArgs $ args)
{
$ entity = $ args-> getEntity
$ entityManager = $ args-> getEntityManager();

//检查学生,教师,任何...
if($ entity instanceof Student){
$ entity-> addRole('ROLE_WHATEVER');
//或
$ entity-> addGroup('students');
// ...
}

// ...
}
}
pre>

服务配置

  #app / config / config.yml或者在bundle extension中加载
services:
your.role_listener:
class:Acme\YourBundle\EventListener\RoleListener
tags:
- {name:doctrine.event_listener,event:prePersist}

解决方案2 (Doctrine LifeCycle Callbacks):






使用生命周期回调,您可以将角色/群组操作直接整合到您的实体中。

  / ** 
* @ ORM\Entity()
* @ ORM\HasLifecycleCallbacks()
* /
class Student
{
/ **
* @ ORM\PrePersist
* /
public function setCreatedAtValue()
{
$ this-> addRole('ROLE_WHATEVER');
$ this-> addGroup('students');
}

解决方案3(事件分派器) p>



\"fos_user.registration.success活动。



如何创建事件侦听器 / EventDispatcher 组件。


I'm using fos user bundle and pugx multi user bundle. I've read all the documentation and I'm new to Symfony. In the pugx multi user bundle there's a sample on every point but one: sucessful registration.

  • Samples of overriding controllers for generating forms => ok
  • Samples of overriding templates for generating forms => ok
  • Samples of overriding successful registration sample => nothing.

Here's my code:

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

The problem is with ->get('pugx_multi_user.registration_manager') which returns a manager. In the fos user overring controllers help, they get either a form or a form.handler. I'm having hard times to "link" those with the pugx_multi_user manager.

What code should I put in the registerTeacherAction() to set roles for teacher, and in registerStudentAction() to set roles for student on a successful registration?

解决方案

Solution 1 (Doctrine Listener/Subscriber)


You can easily add a doctrine prePersist listener/subscriber that adds the roles/groups to your entities depending on their type before persisting.

The listener

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');
            // ...
        }

       // ... 
    }
}

The service configuration

# 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 }

Solution 2 (Doctrine LifeCycle Callbacks):


Using lifecycle callbacks you can integrate the role-/group-operations directly into your entity.

/**
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks()
 */
class Student
{
    /**
     * @ORM\PrePersist
     */
    public function setCreatedAtValue()
    {
        $this->addRole('ROLE_WHATEVER');
        $this->addGroup('students');
    }

Solution 3 (Event Dispatcher):


Register an event listener/subscriber for the "fos_user.registration.success" event.

How to create an event listener / The EventDispatcher component.

这篇关于如何在成功注册时分配角色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆