8

我正在使用 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')返回manager。在fos 用户覆盖控制器帮助中,他们得到 aform或 a form.handler。我很难将那些与 pugx_multi_user 管理器“链接”起来。

我应该输入什么代码registerTeacherAction()来为老师设置角色,并在成功注册时registerStudentAction()为学生设置角色?

4

1 回答 1

9

解决方案 1(Doctrine Listener/Subscriber)


您可以轻松添加一个原则prePersist 侦听器/订阅者,在持久化之前根据它们的类型将角色/组添加到您的实体中。

听者

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 回调):


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

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

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


为“fos_user.registration.success”事件注册一个事件监听器/订阅者。

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

于 2013-10-11T15:33:27.503 回答