0

树枝中是否可以在布局中获取子模板的名称?例如调用时:

$app['twig']->render('index.twig');

然后在layout.twig,这是主要布局,它应该问:

if page is index.twig => include this javascript

我可以在渲染调用中使用其他变量来做到这一点,但这似乎很臃肿,因为模板名称已经表明它。

4

1 回答 1

5

您以错误的方式看待这个问题。想象一下,如果您有很多视图,那么您必须为每个视图都这样做:

{% 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()只需确保也复制父块中的所有内容。

于 2011-08-24T01:49:13.993 回答