9

「name:kernel.event_listener、event:kernel.request」に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 }

私も「優先度」を変更しましたが、何も変更されていません:(

誰かが私にヒントを持っているかもしれません。リスナー「MyBundle.Bar.Listener.RequestListener」が他のイベントの前に呼び出されるようにすることができますか?

4

1 に答える 1

9

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

DIを次のように変更する必要がありました。

  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 }

この「@service_container」サービスを使用し、イベント内でターゲットサービス「@ Need.some.infos.service」を呼び出すと、すべて正常に機能します。

于 2012-07-01T11:59:03.633 に答える