使用祖父母块

Med*_*Med 3 twig

我有以下树枝模板:

{# layout.twig #}

{% block content %}
    THIS IS LAYOUT
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
{# secondary_layout.twig #}

{% extends layout.twig %}
{% block content %}
    THIS IS SECONDARY_LAYOUT
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
{# mypage.twig #}
{% extends secondary_layout.twig %}

{% block content %}
    {# I WOULD LIKE TO USE layout content block  here #}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

我可以在mypage.twig的内容块内调用parent(),但是如何使用祖父母呢?

fis*_*one 5

在某些情况下,您可以实现这一目标。不幸的是,您的情况并非如此。但是,如果仅使用“水平重用”(use关键字),而不使用继承(extends),则该方法有效。例如,这适用于表单主题。

在我的情况下,我定义了一个表单主题,该主题继承自bootstrap 3表单主题。引导程序主题本身继承自“ form_div_layout”。我想覆盖选择小部件,并包括其祖父母的(form_div_layout)块内容,因为在这种情况下,该块的引导版本不适合我。因此,基本上是一个非常相似的问题。

这可以通过从父级(bootstrap_3_layout)和大级父级布局(form_div_layout)继承来解决,同时声明要覆盖的大级父级块的别名:

{# my_form_theme.html.twig #}

{% use 'form_div_layout.html.twig' with choice_widget_collapsed as base_choice_widget_collapsed %}
{% use 'bootstrap_3_layout.html.twig' %}

{% block choice_widget_collapsed -%}
    {# There is no "grandparent()" function, so instead we can do this:  #}
    {{- block('base_choice_widget_collapsed') -}}
{%- endblock %}
Run Code Online (Sandbox Code Playgroud)

我正在写这个答案,尽管它没有回答实际的问题。但是当谷歌搜索这种“祖父母”功能时,其他人也可能会发现这个问题,并且当他们读到这里是不可能的时,也许他们会不必要地放弃。