Twig块间接扩展和追加

时间:2014-02-11 20:32:09

标签: php html symfony twig

我已将布局和模板拆分为少数部分,主要是因为旧的Symfony1习惯。

档案layout.html.twig

...
<body>
  {{ include("ABCBundle:Partials:breadcrumbs.html.twig") }}
  {% block body %}{% endblock %}
</body>
...

档案breadcrumbs.html.twig

<div class="abc">
  {% block breadcrumbs %}
    <a href="#">Home</a>
  {% endblock %}
</div>

档案show.html.twig

{% extends "ABCBundle::layout.html.twig" %}
{% block breadcrumbs %}
  {{ parent() }}
  abc
{% endblock %}

{% block body %}
  (something something)
{% endblock %}

有趣的是,当我渲染show.html.twig时,我可以将数据放入body块,一切正常,但我无法对breadcrumbs块执行任何操作。无论我做什么 - 在该块内写一些内容或者调用parent(),没有任何反应,只会呈现来自breadcrumbs.html.twig的内容。调用parent()以及与扩展块相关的任何其他错误也没有错误。

2 个答案:

答案 0 :(得分:2)

我认为你应该使用{% include "..." %}而不是{{ include("...") }}

根据twig文档,{% include %} tag“包含一个模板,并将该文件的呈现内容返回到当前名称空间”where include function“返回呈现的内容模板的内容“

(意味着include函数只返回呈现的内容,其中标记将内容添加到当前命名空间,其中包括您定义的块)

答案 1 :(得分:0)

找到了解决方案。

看起来您无法扩展布局include中包含的块,而是扩展此布局的模板:

[partial.html.twig]  --- [      layout.html.twig       ] --- [   template.html.twig  ]
 {% block abc %}        {% include 'partial.html.twig' %}   {% extends layout.html.twig %}
                                                            {% block abc%} aaa {%endblock %}

您必须执行一些操作,包括向布局添加额外内容并使用条件替换partial.html.twig中的原始块。更多信息:Overriding blocks within included Twig templates