如果你尝试使用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 %}
注意, 父函数需要在继承的视图中执行(而不是在父视图中执行)。
评论前必须登录!
注册