树枝中是否可以在布局中获取子模板的名称?例如调用时:
$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),您还必须调用 parent():
{% extends 'AcmeHelloBundle::layout.html.twig' %}
....
{% block javascripts %}
{{ parent() }}
<script src="asset('index.js')"></script>
{% endblock %}
parent()
只需确保也复制父块中的所有内容。