Как визуализировать шаблон внутри EventListener? - PullRequest
22 голосов
/ 29 июля 2011

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

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

Ответы [ 2 ]

59 голосов
/ 29 июля 2011

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

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

0 голосов
/ 24 июня 2019

Вы можете ввести 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('test@test.com')
            ->setTo('user@user.com')
            ->setBody($this->_engine->render('mails/test.html.twig',[
             ])
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...