gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:23:31 26 4
gpt4 key购买 nike

我正在使用 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com