2012-07-16 9 views
12

¿Cómo puedo obtener la ruta en una carga de página incluso en el oyente?Symfony2: Obtención de ruta en la página Cargar su Escucha de Evento

tengo el siguiente código en 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 } 

En la clase PageLoadListener tengo el método correspondiente:

public function onKernelController(FilterControllerEvent $event) 
    { 

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

    } 

El problema parece ser que la ruta y los argumentos no son disponible. ¿Qué me estoy perdiendo?

¿Qué evento necesitaría pasar para recoger la ruta y sus argumentos?

Gracias,

JB

Respuesta

30

Todos los eventos del núcleo se extienden KernelEvent, lo que significa que basta con acess el objeto Request través $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'); 
} 

Si desea obtener atributos de ruta simples, simplemente filtre todos los elementos con el prefijo "_".

Elegir el evento adecuado para escuchar depende de su caso de uso específico.

+0

Ese es el boleto, @gilden. _rute y _controller están llenos, lo único que está vacío es el atributo _route_params, aunque el ParameterBag para el objeto Request parece contener el parámetro de ruta. Tendría que consultarlo específicamente, pero funcionará. ¿Sabría por qué _route_params no estaría presente? – jbsound

+0

Veo que se han introducido referencias a _route_params en Symfony 2.1, que parece que todavía está en versión beta. Estoy usando el establo 2.0.15, así que lo solucionaré. Gracias de nuevo por señalarme en la dirección correcta, @gilden. – jbsound

+0

@jbsound lo siento, sigo olvidando que estoy usando 2.1. * Para un proyecto. Podría intentar 'var_dump' -ing' $ request-> attributes-> all() '- los atributos deberían estar en el paquete de parámetros para 2.0. * También. – gilden

Cuestiones relacionadas