如何在成功注册时分配角色? [英] How to assign roles on successful registration?
问题描述
我使用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)
监听器/订阅者
命名空间Acme \YourBundle\EventListener;
pre>
使用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');
// ...
}
// ...
}
}
服务配置
#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 aform
or aform.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 inregisterStudentAction()
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屋!