解决方案 1(教义聆听者/订阅者)
您可以轻松添加教义prePersist
听众/订阅者 http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html在持久化之前,根据其类型将角色/组添加到您的实体中。
听者
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 生命周期回调):
Using 生命周期回调 http://symfony.com/doc/current/book/doctrine.html#lifecycle-callbacks您可以将角色/组操作直接集成到您的实体中。
/**
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks()
*/
class Student
{
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue()
{
$this->addRole('ROLE_WHATEVER');
$this->addGroup('students');
}
解决方案 3(事件调度程序):
注册一个事件监听器/订阅者“fos_用户.注册.成功” https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/FOSUserEvents.php#L137 event.
如何创建事件监听器 http://symfony.com/doc/current/cookbook/service_container/event_listener.html / The 事件调度器 http://symfony.com/doc/current/components/event_dispatcher/introduction.html成分。