我正試圖找到一種方法來擴展事件監聽器/訂戶中已知的枝條塊。Symfony2在事件監聽器中延伸枝條塊
該代碼是非常基本的。
主要枝杈:
<!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>
正如你可以看到它只是一個普通的HTML用2塊:身體和JavaScript的。
現在例如我有一個事件監聽器onKernelResponse。我想在這裏是能夠添加新的JavaScript到「枝」的「延伸」的「JavaScripts」塊。
的代碼可能是這樣的:
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);
}
的$這個 - > twig->延長工作應該像$這個 - > twig->渲染,但而不是呈現一些新的東西,擴展()應獲取$ response並用'AcmeBundle:Javascript:index.html.twig'擴展它,我可以在其中添加更多內容到「javascripts」塊。
這裏是的例子「AcmeBundle:使用Javascript:index.html.twig」:
{% block javascripts %}
{{ parent() }}
<script>
var something = "new";
</script>
{% endblock %}
基本上我正在尋找一種方式來在事件偵聽器編程擴展樹枝塊。
感謝您的幫助提前。
感謝您的快速回復nifr。如果我們有多個事件監聽器將多個代碼添加到塊中會怎麼樣? – Vincent
註冊一個數組變量,如果它不存在,添加元素在它的每個偵聽器..然後循環它時,包括:) – nifr
我想弄清楚如何將元素追加到全局變量如: $ twig-> addGlobal('js_footer_extra',''); 但當然這隻允許我重寫全局變量,而不是添加元素。什麼是追加枝全局數組最好的最佳方式?再次感謝。 – Vincent