我为“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”会在另一个事件之前调用吗?
答案 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”,一切正常。