How to render a template inside an EventListener?

Viewed 16936

How can I render a template inside an EventListener in Symfony 2?

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

Could you help me with that?

2 Answers

You may inject EngineInterface like following;

use Twig\Environment;

public $_engine;

public function __construct(\Swift_Mailer $mailer, Environment $engine)
{
    $this->mailer= $mailer;
    $this->_engine = $engine;
}

this->mailer->send( (new \Swift_Message('something happened'))
            ->setFrom('test@test.com')
            ->setTo('user@user.com')
            ->setBody($this->_engine->render('mails/test.html.twig',[
             ])
        );
Related