是否可以在树枝中获取布局中子模板的名称? 对于实例调用时:树枝主布局中的模板名称
$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