我正在使用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()
为成功注册设置的角色?
答案 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"事件注册事件监听器/订阅者。