2012-07-16 24 views
12

Làm cách nào để có được tuyến đường trong trình tải trang ngay cả khi nghe?Symfony2: Tìm đường trong Trình xử lý sự kiện tải trang

Tôi có đoạn code sau trong services.yml:

page_load_listener: 
    class: Acme\MainBundle\EventListener\PageLoadListener 
    arguments: [@security.context, @session] 
    tags: 
     - { name: kernel.event_listener, event: kernel.controller, method: onKernelController, priority: 64 } 

Trong lớp PageLoadListener tôi có phương pháp tương ứng:

public function onKernelController(FilterControllerEvent $event) 
    { 

     // Some code I need to execute that needs the route arguments 

    } 

Vấn đề dường như là con đường và lập luận không có sẵn. Tôi đang thiếu gì?

Tôi cần vượt qua sự kiện nào để nhận tuyến đường và các đối số của nó?

Cảm ơn,

JB

Trả lời

30

Tất cả các sự kiện hạt nhân mở rộng KernelEvent, có nghĩa là bạn chỉ có thể acess đối tượng Request qua $event->getRequest().

public function onKernelController(FilterControllerEvent $event) 
{ 
    $request = $event->getRequest(); 

    // Matched route 
    $_route = $request->attributes->get('_route'); 

    // Matched controller 
    $_controller = $request->attributes->get('_controller'); 

    // All route parameters including the `_controller` 
    $params  = $request->attributes->get('_route_params'); 
} 

Nếu bạn muốn nhận các thuộc tính tuyến đường đơn giản, chỉ cần lọc ra tất cả các phần tử có tiền tố "_".

Chọn sự kiện thích hợp để nghe tùy thuộc vào trường hợp sử dụng cụ thể của bạn.

+0

Đó là vé, @gilden. _route và _controller được điền, điều duy nhất rỗng là thuộc tính _route_params, mặc dù ParameterBag cho đối tượng Request có vẻ chứa tham số route. Tôi sẽ phải truy vấn nó một cách cụ thể, nhưng nó sẽ hoạt động. Bạn có thể biết tại sao _route_params sẽ không có mặt? – jbsound

+0

Tôi thấy các tham chiếu đến _route_params đã được giới thiệu với Symfony 2.1, có vẻ như vẫn đang trong giai đoạn thử nghiệm. Tôi đang sử dụng ổn định 2.0.15, vì vậy tôi sẽ làm việc xung quanh đó. Cảm ơn bạn lần nữa vì đã chỉ cho tôi đúng hướng, @gilden. – jbsound

+0

@jbsound xin lỗi, tôi tiếp tục quên tôi đang sử dụng 2.1. * Cho một dự án. Bạn có thể thử 'var_dump'-ing' $ request-> attributes-> all() '- các thuộc tính phải nằm trong túi tham số cho 2.0. * Là tốt. – gilden

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