【问题标题】:symfony: event listener for entity not workingsymfony:实体的事件监听器不工作
【发布时间】:2015-03-19 19:58:45
【问题描述】:

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

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

【问题讨论】:

  • 您的服务文件是否正在加载?您可以使用 app/console container:debug 来验证您的服务定义是否被找到。当然,你确实有 8k 代表,所以你可能已经检查过了。
  • 你明白事件只在flush()上触发吗?实体一改变就不行?

标签: symfony doctrine-orm event-listener


【解决方案1】:

我之前有一个similar issue。 下面剥离的示例与您的相同,但要查看完整的工作示例,请访问该帖子。诀窍是,在preUpdate() 事件中的preUpdate() 之后持续存在。

注意:虽然这可能不是最佳解决方案,但可以使用事件订阅者或事件侦听器中的简单 onFlush() -&gt; $uow-&gt;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
        }
    }
} 

【讨论】:

    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多