TWIG YII如何从包含的文件重新声明块

TWIG YII如何从包含的文件重新声明块,yii,twig,Yii,Twig,我有这样的结构: layout.twig: {% include header.twig %} {% block block1 %} {% endblock %} {% block body %} {% block block2 %} {% include header.twig %} {% endblock %} {% block block1 %}default text for block 1 {% endblock %} {% endblock %} he

我有这样的结构:

layout.twig:

{% include header.twig %}
{% block block1 %}
{% endblock %}
{% block body %}
  {% block block2 %}
    {% include header.twig %}
  {% endblock %}

  {% block block1 %}default text for block 1 
  {% endblock %}
{% endblock %}
header.twig:

{% block block2 %}
{% endblock %}
default text for block 2
index.twig:

{% extends "layout.twig" %}
{% block block1 %} text for block 1 {% endblock %}
{% block block2 %} text for block 2 {% endblock %}
{% extends "layout.twig" %}
{% block block1 %} text for block 1 {% endblock %}
{% block block2 %} text for block 2 {% endblock %}
当我渲染index.twig时,block1将按预期替换为文本值,但block2仍为空。为什么block2没有被重新声明的内容所取代?这对于普通的TWIG是正确的,还是仅仅针对Yii框架实现TWIG是一个问题?我应该如何更改结构以使其按所述方式工作


提前感谢

这只是因为结构,通常的方法是在布局中有一个根块,并覆盖模板中的一些块

layout.twig:

{% include header.twig %}
{% block block1 %}
{% endblock %}
{% block body %}
  {% block block2 %}
    {% include header.twig %}
  {% endblock %}

  {% block block1 %}default text for block 1 
  {% endblock %}
{% endblock %}
header.twig:

{% block block2 %}
{% endblock %}
default text for block 2
index.twig:

{% extends "layout.twig" %}
{% block block1 %} text for block 1 {% endblock %}
{% block block2 %} text for block 2 {% endblock %}
{% extends "layout.twig" %}
{% block block1 %} text for block 1 {% endblock %}
{% block block2 %} text for block 2 {% endblock %}
输出:

text for block 1
text for block 2

这是正常的行为。看这里