9

我为“名称:kernel.event_listener,事件: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 回答