从Twig中的“子”模板渲染“父”模板的块

时间:2017-10-25 09:33:25

标签: php templates twig

我有两个模板:

Fields.html.twig ,其中包含子模板。

{% block important %}
  This block should be renderable from the sub template
{% endblock important %}

{% include 'XButton.html.twig' %}

XButton.html.twig ,需要呈现模板中定义的包含它的块。

block('important')

似乎包含的模板无法简单地呈现包含它的人的块 父模板如何将完整上下文传递给子项,以便子项可以访问父项中定义的块?

2 个答案:

答案 0 :(得分:0)

您尝试做的事情是不可能的,因为包含的模板无法了解其他模板中定义的块...

您需要以不同的方式构建代码,以便以某种方式在父级中定义块的内容 - 您至少有几个选项:

使用setincludehttps://twigfiddle.com/l536np

Fields.html.twig

{% set important %}
    You define the child content as a variable in the parent...
{% endset %}

{% include 'XButton.html.twig' %}

XButton.html.twig

{{ important }}

使用embedhttps://twigfiddle.com/y9pp6p

Fields.html.twig

{% embed 'XButton.html.twig' %}
    {% block important %}
        You define the block content in the parent...
    {% endblock %}
{% endembed %}

XButton.html.twig

{{ block('important') }}

答案 1 :(得分:-1)

您可以通过传递父模板名称

来实现
{% block important %}
  This block should be renderable from the sub template
{% endblock important %}

{% include 'XButton.html.twig' with {'parent': _self} %}

然后在包含模板中使用它

{{ block('important', parent) }}

虽然通过这种方式,块的内容将呈现两次 - 一次在父级中定义,一次在子级中 - 请参阅https://twigfiddle.com/6t0l6p