如何在Symfony 2中更改事件处理程序的优先级 [英] How to change event handler priority in Symfony 2

查看:104
本文介绍了如何在Symfony 2中更改事件处理程序的优先级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经为name:kernel.event_listener,event:kernel.request定义了2个事件监听器,但是我可以做我想要的,我不能改变调用这个监听器的顺序。我尝试使用优先级数字,但没有任何帮助。



此事件始终调用@first:

  MyBundle.Foo.Listener.RequestListener:
class:%MyBundle.Foo.Listener.request.class%
参数:[@session,@ liip_theme.active_theme ,@ Need.some.infos.service]
标签:
- {name:kernel.event_listener,event:kernel.request,method:onRequest,priority:100}

并且此事件永远不会调用,因为第一个事件使用依赖于此事件信息的服务,因此在此事件之前崩溃被触发:

  MyBundle.Bar.Listener.RequestListener:
class:%MyBundle.Bar.Listener.request。 class%
arguments:[@session]
标签:
- {name:kernel.event_listener,event:kernel.request,method:onRequest,priority:200}

我也改变了优先级,但没有改变:(



可能有人对我有一个提示,我可以确保监听器MyBundle.Bar.Listener.RequestListener在其他事件之前调用?

解决方案

问题是事件侦听器类将在Symfony启动之前启动任何事件触发器。



我不得不更改我的DI到:

  MyBundle.Foo.Listener.RequestListener:
class:%MyBundle.Foo.Listener.request.class %
参数:[@session,@ liip_theme.active_theme,@service_container]
标签:
- {name:kernel.event_listener,event:kernel.request,method:onRequest,priority:0

我使用这个@service_container服务,并在事件内部呼叫目标服务@Need .some.infos.service,一切正常。


I have defined 2 event listeners for "name: kernel.event_listener, event: kernel.request", but I can do what I want, I can't change the order of calling this listener. I try to use the "priority" number, but nothing helps.

This event is always calling @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 }

and this event is never calling, because the first event use a service that depends on a info of this event, so it crashes before this event is triggered:

  MyBundle.Bar.Listener.RequestListener:
    class: %MyBundle.Bar.Listener.request.class%
    arguments: [ @session ]
    tags:
      - { name: kernel.event_listener, event: kernel.request, method: onRequest, priority: 200 }

I have changed the "priority" too, but nothing changed :(

Maybe someone have a tip for me, that I can to ensure that listener "MyBundle.Bar.Listener.RequestListener" will call before the other event?

解决方案

The problem is that the event listener class will init at Symfony start, before any event triggers.

I had to change my DI to:

  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 }

I used this "@service_container" service, and call inside the event the target service "@Need.some.infos.service" and all works fine.

这篇关于如何在Symfony 2中更改事件处理程序的优先级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆