如何将块传递给包含的模板?

How to pass a block to an included template?

我的 Twig 文件的结构如下所示:

- "skeleton_main"
  - includes "skeleteon_header"
  - render "block content"

- "skeleteon_header" should render "block breadcrumb"

- "partial"
  - extends "skeleton_main"
  - fills "block breadcrumb"

现在我可以在“sekeleton_main”中输出“block breadcrumb”,但它不会传递给“skeleton_header”。如何从包含的模板中访问和呈现块?我尝试使用 {% include '' with {} %} 但没有成功。

# skeleton_main
{% include 'header' %}
{% block content %}{% endblock %}

# header
{% block breadcrumb %}{% endblock %}

# partial
{% extends 'skeleton_main' %}
{% block breadcrumb %} Breadcrumb {% endblock %}
{% block content %} Content {% endblock %}

也许这种方法有问题?

您使用的 include 不允许覆盖块。

是否有理由使用 include 而不是 extend

另一种解决方案是使用 embed,它的功能与 include 相同,但同时允许覆盖块:

http://twig.sensiolabs.org/doc/tags/embed.html

我认为你的方法不对。

您应该将 header 定义为 block,而不是单独的模板。

{# skeleton_main #}
{% block header %}
    {% block breadcrumb %}{% endblock %}
{% endblock %}
{% block content %}{% endblock %}

{# partial #}
{% extends 'skeleton_main' %}
{% block breadcrumb %} Breadcrumb {% endblock %}
{% block content %} Content {% endblock %}