个性化阅读
专注于IT技术分析

如何使用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="path_to_something">
          User Normal Action 1
       </a>
        <a href="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工具栏块的内容和新内容), 而不在我们需要的每个视图中写入所有内容, 我们将使用父函数包含原始块的内容而无需替换一切。

该树枝函数将获取现有块的内容, 因此我们可以在继承的视图中再次打印它。因此, 我们将具有操作链接, 并且将添加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 %}

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

赞(0)
未经允许不得转载:srcmini » 如何使用TWIG Standalone和Symfony 2在继承的视图中呈现父块的内容

评论 抢沙发

评论前必须登录!