如何在成功注册时分配角色?

时间:2013-10-11 14:51:19

标签: symfony controller fosuserbundle pugxmultiuserbundle

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

  • 生成表格的覆盖控制器样本=>确定
  • 生成表单的覆盖模板示例=>确定
  • 覆盖成功注册样本的样本=>什么都没有。

这是我的代码:

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 个答案:

答案 0 :(得分:9)

解决方案1(Doctrine Listener / Subscriber)


您可以轻松添加一个原则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 Callbacks):


使用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组件。