0
在我的项目我管理用户和包含用户名和密码是强制性(因为我用FOSUserBundle),我可以用两种方式处理它们:通话的Symfony事件仅在某些情况下
- 如果用户应该有机会获得管理方面,用户名和密码应该由用户注册设置(如名称:myusername/MYPASSWORD)
- 如果用户不应该进入管理区,这个用户名和密码是默认定义(例如user123,pass123其中123是用户ID)
我并不完全放心symfony中eventListener/dispatcher的subtelties。
为了有这样的行为,我创建了一个监听器:
use Doctrine\ORM\Event\LifecycleEventArgs;
use MyBundle\Entity\User;
class UserListener
{
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$em = $args->getEntityManager();
if ($entity instanceof User) {
$entity->setUsername('user'.$entity->getId());
$entity->setPassword('user'.$entity->getId());
$entity->setEmail('user'.$entity->getId());
$em->persist($entity);
$em->flush();
}
}
}
与服务:
mybundle.user_listener:
class: MyBundle\EventListener\UserListener
tags:
- { name: doctrine.event_listener, event: postPersist }
但这obiously不起作用:因为这是一个服务,它我每次添加更新用户都适用。
我的问题是: 我该如何应用这个监听器只有当我需要它:?
-
只有在插入时(而不是在更新)
- 仅在控制器“我问它”
=>也许我错了,但我不能传递参数从控制器到postPersist事件?
检查的UnitOfWork,看变更是什么,确定羯羊或不运行代码.. –
因此,在这种情况下,我不会用任何监听器? – Overdose
是的,你可以,但是在这个监听器里面,你可以检查你的用户实体中发生了什么变化,并且只运行setter,并且坚持并刷新,如果相关内容已经改变了,或者我误解了这个问题? –