symfony:实体的事件监听器不工作

时间:2015-03-19 19:58:45

标签: symfony doctrine-orm event-listener

我在下面有这个事件监听器,但它不起作用:

<?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内的任何实体时被触发。

1 个答案:

答案 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
        }
    }
}