2015-03-19 4 views
0

У меня есть этот слушатель событий ниже, но это не работает:Symfony: прослушиватель события для объекта не работает

<?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

Является ли ваш файл службы загружается? Вы можете использовать контейнер app/console: debug для проверки определения вашего сервиса. Конечно, у вас есть 8k rep, поэтому вы, вероятно, уже проверили это. – Cerad

+0

И вы понимаете, что события запускаются только на флеш()? Не как только объект изменится? – Cerad

ответ

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 } 

Event Listener

<?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 
     } 
    } 
} 
Смежные вопросы