2012-06-30 32 views
8

Tôi đã xác định 2 trình xử lý sự kiện cho "name: kernel.event_listener, event: kernel.request", nhưng tôi có thể làm những gì tôi muốn, tôi không thể thay đổi thứ tự gọi người nghe này. Tôi cố gắng sử dụng số "ưu tiên", nhưng không có gì hữu ích.Làm thế nào để thay đổi ưu tiên xử lý sự kiện trong Symfony 2

Sự kiện này luôn được gọi @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 } 

và sự kiện này là không bao giờ gọi điện thoại, bởi vì sự kiện đầu tiên sử dụng dịch vụ mà phụ thuộc vào một thông tin về sự kiện này, vì vậy nó bị treo trước khi sự kiện này được kích hoạt :

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

tôi đã thay đổi "ưu tiên" quá, nhưng không có gì thay đổi :(

có lẽ ai đó có một mẹo cho tôi, mà tôi có thể để đảm bảo rằng người nghe "MyBundl e.Bar.Listener.RequestListener "sẽ gọi trước sự kiện khác?

Trả lời

8

Sự cố là lớp trình nghe sự kiện sẽ khởi động khi bắt đầu Symfony, trước bất kỳ trình kích hoạt sự kiện nào.

tôi đã phải thay đổi DI tôi để:

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 } 

tôi đã sử dụng "@service_container" dịch vụ này, và gọi bên trong trường hợp các dịch vụ mục tiêu "@ Need.some.infos.service" và tất cả hoạt động tốt .

Các vấn đề liên quan