2012-07-16 14 views
12

Bir sayfa yüklerken bile yolu nasıl dinleyebilirim?Symfony2: Sayfada Rota Başlarken Yük Olay Dinleyiciyi Yükle

Ben services.yml aşağıdaki kod:

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

PageLoadListener sınıfta ben karşılık gelen yöntemi vardır:

public function onKernelController(FilterControllerEvent $event) 
    { 

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

    } 
sorun rota ve argümanlar olmadıklarını gibi görünüyor

mevcut. Neyi kaçırıyorum?

Rotayı ve argümanları almak için hangi etkinliği iletmem gerekiyor?

sayesinde, sadece $event->getRequest() aracılığıyla Request nesneyi acess anlamına gelir

cevap

30

Tüm çekirdek olayları KernelEvent uzatmak

JB.

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'); 
} 

Düz rota öznitelikleri almak istiyorsanız, "_" ile öntanımlı tüm öğeleri filtreleyin.

Dinlenecek uygun olayın seçilmesi, özel kullanım durumunuza bağlıdır.

+0

Bu bilet, @gilden. _route ve _controller doldurulur, boş olan tek şey _route_params özniteliğidir, ancak Request nesnesine ait ParameterBag, route parametresini içerdiği görünmektedir. Özellikle sorgulamalıyım, ama işe yarayacak. _route_params'ın neden mevcut olmayacağını biliyor musunuz? – jbsound

+0

Symfony 2.1'e tanıtılmış olan _route_params ile ilgili referansları görüyorum, hala beta gibi görünüyor. Kararlı 2.0.15 kullanıyorum, bu yüzden bu konuda çalışacağım. Beni doğru yönde işaret ettiğin için tekrar teşekkürler, @gilden. – jbsound

+0

@jbsound Üzgünüm, bir proje için 2.1 kullanıyorum. Var_dump'nın '$ request-> attributes-> all()' deneyebilirsiniz - öznitelikleri 2.0 için * parametre torbasında olmalıdır. – gilden