2012-06-30 7 views
8

Mam zdefiniowane 2 detektory zdarzeń dla "name: kernel.event_listener, event: kernel.request", ale mogę zrobić, co chcę, nie mogę zmienić kolejności wywoływania ten słuchacz. Próbuję użyć numeru "priorytet", ale nic nie pomaga.Jak zmienić priorytet obsługi zdarzenia w Symfony 2

To zdarzenie jest zawsze dzwoni @first:

MyBundle.Foo.Listener.RequestListener: 
    class: %MyBundle.Foo.Listener.request.class% 
    arguments: [ @session, @liip_theme.active_theme, @Need.some.infos.service ] 
    tags: 
     - { name: kernel.event_listener, event: kernel.request, method: onRequest, priority: 100 } 

i wydarzenie to nigdy nie dzwoni, bo pierwsze zdarzenie skorzystać z usługi, która zależy na informacji o tym wydarzeniu, tak wywala przed wywołaniem tego zdarzenia :

MyBundle.Bar.Listener.RequestListener: 
    class: %MyBundle.Bar.Listener.request.class% 
    arguments: [ @session ] 
    tags: 
     - { name: kernel.event_listener, event: kernel.request, method: onRequest, priority: 200 } 

Zmieniłem „priorytet” zbyt, ale nic się nie zmieniło :(

Może ktoś ma wskazówka dla mnie, że mogę zapewnić, że słuchacz „MyBundl e.Bar.Listener.RequestListener "zadzwoni przed innym wydarzeniem?

Odpowiedz

8

Problem polega na tym, że klasa nasłuchiwania zdarzeń zostanie zainicjowana podczas uruchamiania Symfony, zanim jakiekolwiek zdarzenie zostanie uruchomione.

musiałem zmienić DI do:

MyBundle.Foo.Listener.RequestListener: 
    class: %MyBundle.Foo.Listener.request.class% 
    arguments: [ @session, @liip_theme.active_theme, @service_container ] 
    tags: 
     - { name: kernel.event_listener, event: kernel.request, method: onRequest, priority: 0 } 

użyłem tego „@service_container” usługi i wywołać wewnątrz przypadku usługi docelowej „@ Need.some.infos.service” i wszystko działa poprawnie .