如何使用TWIG Standalone和Symfony 2在继承的视图中呈现父块的内容

如果你尝试使用twig在父视图中已经存在的块中添加一些内容, 并且你发现仅替换了该内容, 并且原始内容消失了, 你可能会问自己如何也包含原始内容?当模板使用继承时, 可以通过使用twig中的父函数来覆盖父块时呈现父块的内容。但是, ****意味着什么?让我们用代码来解释一下:
在此示例中, 我们将有一个工具栏, 该工具栏将是一个简单的div, 它具有以下内容(位于base.html.twig文件中):

< !DOCTYPE> < html>     < head>         < !-- CSS files and other things here -->     < /head>     < body>         {%block content -%}        {% endblock %}        {%block toolbar -%}              < a href="http://www.srcmini.com/path_to_something">                     User Normal Action 1              < /a>                 < a href="http://www.srcmini.com/path_to_something">                     User Normal Action 2              < /a>         {%endblock%}    < /body> < /html>

在这种情况下, 我们的父块将是工具栏, 因为我们将在视图中扩展该块而不删除其内容。
如果继承的视图不使用具有现有名称的块(例如, 不再使用工具栏块g), 你会注意到该块工具栏将完全按照base.html.twig文件中的显示方式呈现:
{% extends '::base.html.twig' %}{% block content -%}I'll only change the content of the template but not the toolbar block !{% endblock content%}

但是, 如果你决定在继承的视图中包括工具栏选项卡, 则该视图的内容将替换base.html.twig文件的内容:
{% extends '::base.html.twig' %}{% block content -%}I'll change the content{% endblock content%}{% block toolbar -%}  The actions links will be removed and this will appear instead ! :({% endblock toolbar %}

而我想同时拥有(base.html.twig工具栏块的内容和新内容), 而不在我们需要的每个视图中写入所有内容, 我们将使用父函数包含原始块的内容而无需替换一切。
【如何使用TWIG Standalone和Symfony 2在继承的视图中呈现父块的内容】该树枝函数将获取现有块的内容, 因此我们可以在继承的视图中再次打印它。因此, 我们将具有操作链接, 并且将添加2个新按钮而不删除链接:
{% extends '::base.html.twig' %}{% block content -%}I'll change the content{% endblock content%}{% block toolbar -%}{{parent()}} {# The content of the base.html.twig will be retrieved and printed in this inherited view too#}  < button type="button"> User normal action 3 only in this view< /button> < button type="button"> User normal action 4 only in this view< /button> {% endblock toolbar %}

注意, 父函数需要在继承的视图中执行(而不是在父视图中执行)。

    推荐阅读