2012-06-30 34 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启动时初始化。

我有我的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”和一切工作正常。