如何在Symfony 2中更改事件处理程序优先级

时间:2012-06-30 23:08:11

标签: symfony event-handling

我为“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”会在另一个事件之前调用吗?

1 个答案:

答案 0 :(得分:8)

问题是在任何事件触发之前,事件监听器类将在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”,一切正常。