我已将布局和模板拆分为少数部分,主要是因为旧的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()
以及与扩展块相关的任何其他错误也没有错误。
答案 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