如果你尝试使用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 %}
注意, 父函数需要在继承的视图中执行(而不是在父视图中执行)。
推荐阅读
- 如何在Windows中创建symfony(2或3)项目
- 什么是以及如何在Symfony2中创建数据转换器
- 使用C#进行语音合成,让你的应用说话
- 如何在Symfony 2中为Doctrine存储库创建自定义方法
- TemplateMonster的Shopify会员资格(以99%的折扣价批量获取高级主题)
- 在Symfony 3中使用dhtmlxScheduler创建事件日历(计划程序)
- composer install,composer update和composer require之间有什么区别
- Codelobster(免费的PHP,HTML,CSS,JavaScript编辑器(IDE))
- node app.use()src表示local,dist表示prod