Как визуализировать шаблон внутри 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);
}
}
Не могли бы вы мне помочь?
Ответы
Ответ 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',[
])
);