2012-06-30 15 views
8

"name:kernel.event_listener、event:kernel.request"に対して2つのイベントリスナーを定義しましたが、私が望むことはできますが、呼び出しの順序を変更することはできませんこのリスナー。私は「優先」番号を使用しようとしますが、何も助けません。Symfony 2でイベントハンドラの優先度を変更する方法

このイベントは常に@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 } 
をし、最初のイベントは、このイベントの情報に依存したサービスを使用しているため、このイベントは、呼び出しされることはありませんので、このイベントがトリガされる前に、それがクラッシュしました:

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

私も「優先順位」に変更しましたが、何もそのリスナー「MyBundlを確保するために私ができることを、たぶん誰かが私のためのヒントを持っている:(

を変更しませんe.Bar.Listener.RequestListener "は他のイベントの前に呼び出しますか?

答えて

8

問題は、イベントリスナークラスは、Symfonyの開始時にイベントがトリガーされる前にinitされることです。

私は私のDIを変更する必要がありました:私は、この「@service_container」サービスを使用し、「Need.some.infos.service @」イベント内でターゲットサービスを呼び出すと、すべてが正常に動作します

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 } 

関連する問題