2012-07-25 7 views

Odpowiedz

7

Potrzebujesz subskrybenta zdarzenia zamiast detektora zdarzeń.

Należy zmienić tag usługi na doctrine.event_subscriber, a klasa powinna wdrożyć Doctrine\Common\EventSubscriber. Musisz zdefiniować getSubscribedEvents, aby zadowolić EventSubscriber, która zwraca tablicę zdarzeń, które chcesz zasubskrybować.

ex

<?php 

namespace Company\YourBundle\Listener; 

use Doctrine\Common\EventArgs; 
use Doctrine\Common\EventSubscriber; 

class YourListener implements EventSubscriber 
{ 
    public function getSubscribedEvents() 
    { 
     return array('prePersist', 'onFlush'); 
    } 

    public function prePersist(EventArgs $args) 
    { 

    } 

    public function onFlush(EventArgs $args) 
    { 

    } 
} 
+0

próbowałem to w services.yml i znowu ten sam błąd '{nazwa: octrine.event_subscriber, event: prePersist, preUpdate } ' – user825904

+1

* d * octrine (literówka?) I nie określaj zdarzeń w swojej konfiguracji. "getSubscribedEvents" to robi. Co to jest błąd? –

+1

dzięki za to wypróbowałem to i zadziałało '{{name: doctrine.event_subscriber, connection: default}}'. Czy mogę dodać więcej zdarzeń w subskrybowanej tablicy zdarzeń, takich jak PostFlush i więcej. lub czy wystarczy tylko dwa – user825904

16

myślę, że można zrobić tak:

my.listener: 
     class: Acme\SearchBundle\Listener\SearchIndexer 
     tags: 
      - { name: doctrine.event_listener, event: postPersist } 
      - { name: doctrine.event_listener, event: preUpdate } 
+0

Tak, możesz to zrobić tak. Wygląda bardzo prosto i prosto. – cezar

Powiązane problemy