1

我使用 Twig 创建了三个模板。第一个A定义了块,第二个从第一个扩展,但包括第三个模板,它设置块的内容A

通过浏览器加载呈现 b.html.twig 的 url 时,块中的内容A(由第 3 个模板定义)未定义块 _A。

例子:

<!-- base.html.twig -->
{% block _css '' %}

{% block _header '' %}
{% block _content '' %}
{% block _footer '' %}

{% block _js '' %}


<!-- layout.html.twig -->
<!-- header and footer are placed in the raight zone -->
{% extends ::base.html.twig %}

{% block _header %}
    {% render "MyBundleBundle:Header:header"  %}
{% endblock %}

{% block _footer %}
    {% render "MyBundleBundle:Footer:footer" %}
{% endblock %}


<!-- my_template.html.twig -->
<!-- content is also placed in the right zone but css and js blocks in the included     template are not placed where declared in base.html.twig -->
{% extends MyBundleBundle::layout.html.twig %}
{% block _content %}
     SOME_CONTENT
     {% include MyBundleBundle::my_included_template.html.twig %}
{% endblock %}


<!-- my_included_template.html.twig -->
{% block _css %}
 <link.......................>
{% endblock %}

{% block _js %}
 <script..................>
{% endblock %}

MORE CONTENT BELONGING TO THE INCLUDED TEMPLATE

我在这里期望的是,_css 阻止内容出现在页面顶部,_js 阻止内容出现在底部,但这并没有发生。我希望你能看到我哪里出错了,谢谢!

4

1 回答 1

1

包含标签不像您认为/希望的那样工作。它只是将文件包含到当前上下文中。这意味着您不能引用blocks。您只能在文件顶部具有扩展标签的模板中引用块。

您将不得不重新构建您设计模板的方式以使其适合您。而不是包括my_included_template.html.twig你应该直接在你的控制器中呈现该模板。这样它就可以完全访问任何继承的块。

于 2012-12-13T15:58:29.327 回答