2012-06-30 2 views
8

"name : kernel.event_listener, event : kernel.request"에 대해 2 개의 이벤트 리스너를 정의했으나 원하는대로 할 수 있습니다. 호출 순서를 변경할 수 없습니다. 이 청취자. 나는 "우선 순위"번호를 사용하려고 시도하지만 아무 도움이되지 않습니다.Symfony 2에서 이벤트 처리기 우선 순위를 변경하는 방법

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 } 

을하고 첫 번째 이벤트는이 이벤트의 정보에 의존하는 서비스를 사용하기 때문에이 이벤트는 결코 호출되지 않습니다 때문에,이 이벤트가 트리거되기 전에 충돌 :

이 이벤트는 항상 @first 호출 :

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를 변경했다 "Need.some.infos.service @"경우 내부 대상 서비스를

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"서비스를 사용하고, 전화를 모두 잘 작동합니다 .

관련 문제