2012-06-30 14 views
8

ho definito 2 listener di eventi per "Nome: kernel.event_listener, evento: kernel.request", ma posso fare quello che voglio, non posso cambiare l'ordine di chiamare questo ascoltatore. Cerco di usare il numero "priorità", ma niente aiuta.Come cambiare la priorità gestore di eventi in Symfony 2

Questo evento è sempre chiamando @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 } 

e questo evento non è mai chiamando, perché il primo evento utilizzare un servizio che dipende da un'informazioni di questo evento, così si blocca prima di questo evento viene attivato :

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

ho cambiato la "priorità" troppo, ma non è cambiato nulla :(

Forse qualcuno ha un suggerimento per me, che io possa far sì che chi ascolta "MyBundl e.Bar.Listener.RequestListener "chiamerà prima dell'altro evento?

risposta

8

Il problema è che la classe listener di eventi sarà init all'avvio Symfony, prima di ogni evento attiva.

ho dovuto cambiare il mio DI a:

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 } 

Ho usato questo servizio "@service_container", e chiamare all'interno della manifestazione il servizio di destinazione "@ Need.some.infos.service" e tutto funziona bene .