2011-07-29 17 views
21

¿Cómo puedo renderizar una plantilla dentro de un EventListener en Symfony 2?¿Cómo renderizar una plantilla dentro de un EventListener?

class RequestListener 
{ 
    public function __construct() { } 

    public function onKernelRequest(GetResponseEvent $event) 
    { 
     $request = $event->getRequest(); 

     // Here I want to render a particular twig template 
     $response = new Response('Forbidden', 401); 

     // replacing the response... 
     $event->setResponse($response); 
    } 
} 

¿Me podría ayudar con eso?

Respuesta

58

Cuando llama al $this->render() en un controlador, en realidad es solo un atajo para $this->container->get('templating')->renderResponse(). Si pasa @templating como un argumento constructor para su EventListener en su archivo de configuración, podrá hacer lo que quiera con el motor de plantillas. Como referencia, si desea ver el código del motor de plantillas, el comando ./app/console container:debug dice que templating es una instancia de Symfony\Bundle\TwigBundle\TwigEngine.

+0

¡Funciona, gracias! – dmirkitanov

+0

Problematic, has guardado mi tocino una vez más. Inyectar cosas como @templating es algo mágico. – Espilon

Cuestiones relacionadas