是否可以在樹枝中獲取佈局中子模板的名稱? 對於實例調用時:樹枝主佈局中的模板名稱
$app['twig']->render('index.twig');
然後在layout.twig,這是主要的佈局,應該問:
if page is index.twig => include this javascript
我能在渲染調用與其他變量做到這一點,但這似乎是臃腫的,因爲模板名稱會顯示它已經。
是否可以在樹枝中獲取佈局中子模板的名稱? 對於實例調用時:樹枝主佈局中的模板名稱
$app['twig']->render('index.twig');
然後在layout.twig,這是主要的佈局,應該問:
if page is index.twig => include this javascript
我能在渲染調用與其他變量做到這一點,但這似乎是臃腫的,因爲模板名稱會顯示它已經。
你正在看着這個錯誤的方式。試想一下,如果你有很多的看法,那麼你必須做的每一個:
{% if _self.getTemplateName() == 'index.twig' %}
<script src="{{ asset('somescript1') }}"></script>
{% endif %}
{% if _self.getTemplateName() == 'members.twig' %}
<script src="{{ asset('somescript2') }}"></script>
{% endif %}
{% if _self.getTemplateName() == 'news.twig' %}
<script src="{{ asset('somescript3') }}"></script>
{% endif %}
...
我發現這種方法非常糟糕。你可以做什麼,在你的主要佈局文件(讓我們假設其在這個例子中「layout.html.twig」)是使一個塊:
{% block javascripts %}
{% endblock %}
然後,在視圖文件:
{% extends 'AcmeHelloBundle::layout.html.twig' %}
....
{% block javascripts %}
<script src="asset('index.js')"></script>
{% endblock %}
基本上,你用新內容覆蓋佈局文件中的塊。如果你有你的「layout.html.twig」裏的任何東西(例如像jQuery的),你也必須調用父():
{% extends 'AcmeHelloBundle::layout.html.twig' %}
....
{% block javascripts %}
{{ parent() }}
<script src="asset('index.js')"></script>
{% endblock %}
parent()
只是確保所有的內容從複製父塊也是如此。
我認爲這個問題幾乎相同:https://github.com/fabpot/Twig/issues/350 – ivoba