我在下面有这个事件监听器,但它不起作用:
<?php
namespace Project\BackendBundle\EventListener;
//src/Project/BackendBundle/EventListener/ClippedImagesManager.php
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PostFlushEventArgs;
use Project\BackendBundle\Entity\Subitem;
class ClippedImagesManager
{
public function preUpdate(LifecycleEventArgs $args)
{
die("Event listener!!!");
}
//src/Project/BackendBundle/Resources/config/services.yml
services:
project.clipped_images_manager:
class: Project\BackendBundle\EventListener\ClippedImagesManager
tags:
- { name: doctrine.event_listener, event: preUpdate }
我期待“事件听众!!”更新BackendBundle
内的任何实体时被触发。
答案 0 :(得分:1)
之前我有一个similar issue。
以下示例与您的相同,但要查看完整的工作示例,请访问帖子。诀窍是,在preUpdate()
事件中postFlush()
后持续存在。
注意:虽然这可能不是最佳解决方案,但可以使用事件监听器中的事件订阅者或简单onFlush() -> $uow->getScheduledEntityUpdates()
来完成。
<强> Service.yml 强>
services:
entity.event_listener.user_update:
class: Site\FrontBundle\EventListener\Entity\UserUpdateListener
tags:
- { name: doctrine.event_listener, event: preUpdate }
事件监听器
<?php
namespace Site\FrontBundle\EventListener\Entity;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Site\FrontBundle\Entity\User;
class UserUpdateListener
{
public function preUpdate(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
// False check is compulsory otherwise duplication occurs
if (($entity instanceof User) === false) {
// Do something
}
}
}