Подтвердить что ты не робот

Как визуализировать шаблон внутри EventListener?

Как создать шаблон внутри EventListener в 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);
    }
}

Не могли бы вы мне помочь?

4b9b3361

Ответ 1

Когда вы вызываете $this->render() в контроллере, это действительно просто ярлык для $this->container->get('templating')->renderResponse(). Если вы передадите @templating в качестве аргумента конструктора в свой EventListener в своем файле конфигурации, вы сможете делать все, что хотите, с помощью механизма шаблонов.

Для справки, если вы хотите посмотреть на код механизма шаблонов, команда ./app/console container:debug говорит, что templating является экземпляром Symfony\Bundle\TwigBundle\TwigEngine.

Ответ 2

Вы можете ввести EngineInterface следующим образом;

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('[email protected]')
            ->setTo('[email protected]')
            ->setBody($this->_engine->render('mails/test.html.twig',[
             ])
        );