我下面有这个事件监听器,但它不起作用:
<?php
namespace ProjectBackendBundleEventListener;
//src/Project/BackendBundle/EventListener/ClippedImagesManager.php
use DoctrineORMEventLifecycleEventArgs;
use DoctrineORMEventPostFlushEventArgs;
use ProjectBackendBundleEntitySubitem;
class ClippedImagesManager
{
public function preUpdate(LifecycleEventArgs $args)
{
die("Event listener!!!");
}
//src/Project/BackendBundle/Resources/config/services.yml
services:
project.clipped_images_manager:
class: ProjectBackendBundleEventListenerClippedImagesManager
tags:
- { name: doctrine.event_listener, event: preUpdate }
在更新BackendBundle
内的任何实体时,我预计会触发"事件侦听器!!"。
我以前也遇到过类似的问题。下面的剥离示例与您的相同,但要查看完整的工作示例,请访问帖子。诀窍是,在postFlush()
事件中的preUpdate()
之后持续。
注意:尽管这可能不是最好的解决方案,但可以使用事件订阅服务器或事件侦听器中的简单onFlush() -> $uow->getScheduledEntityUpdates()
来完成。
服务.yml
services:
entity.event_listener.user_update:
class: SiteFrontBundleEventListenerEntityUserUpdateListener
tags:
- { name: doctrine.event_listener, event: preUpdate }
事件侦听器
<?php
namespace SiteFrontBundleEventListenerEntity;
use DoctrineORMEventLifecycleEventArgs;
use SiteFrontBundleEntityUser;
class UserUpdateListener
{
public function preUpdate(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
// False check is compulsory otherwise duplication occurs
if (($entity instanceof User) === false) {
// Do something
}
}
}