イベントリスナー/サブスクライバーで既知の小枝ブロックを拡張する方法を見つけようとしています。
コードは非常に基本的です。
主な小枝:
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Hello World</title>
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>
ご覧のとおり、body と javascripts の 2 つのブロックを持つ単純な html です。
たとえば、イベント リスナー onKernelResponse があります。ここで欲しいのは、twig の「extends」を使用して「javascripts」ブロックに新しい JavaScript を追加できるようにすることです。
コードは次のようになります。
public function onKernelResponse(FilterResponseEvent $event)
{
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}
$response = $event->getResponse();
//complete guesswork code to illustrate what I'm trying to achieve
$content = $this->twig->extend( //extend() function is imaginary
$response, //pass in current response
'AcmeBundle:Javascript:index.html.twig',
);
$response->setContent($content);
}
$this->twig->extend は $this->twig->render のように機能するはずですが、何か新しいものをレンダリングする代わりに、extend() は $response を受け取り、'AcmeBundle:Javascript:index.html. 「javascripts」ブロックにコンテンツを追加できます。
「AcmeBundle:Javascript:index.html.twig」の例を次に示します。
{% block javascripts %}
{{ parent() }}
<script>
var something = "new";
</script>
{% endblock %}
基本的に、イベントリスナーで小枝ブロックをプログラムで拡張する方法を探しています。
事前に助けてくれてありがとう。