使用sf2.6.4和Twig模板系统,标签使用'我有一种奇怪的行为。
使用简单的基本模板定义默认导航栏和标题内容:
{# base.html.twig #}
<html lang="fr">
<head></head>
<body>
{% block navbar %}<hr> nav bar foo bar<hr>{% endblock %}
<!-- a default header -->
{% block header %}
{% include 'AppBundle:TestingTwigUse:header.html.twig' %}
{% endblock %}
</body>
使用给定的默认header.html.twig模板:
{# header.html.twig #}
{% block header_container %}
{% block header_title %}<h1>Default title</h1>{% endblock %}
{% block header_content %}
<div>
This default text header, blablabla...
</div>
{% endblock %}
{% endblock %}
当我尝试构建索引模板时,继承基本模板并使用&#39;覆盖标题内容。使用&#39;标记如下:
{# index.html.twig #}
{% extends "AppBundle:TestingTwigUse:base.html.twig" %}
{% block header %}
{% use 'AppBundle:TestingTwigUse:header.html.twig' %}
{% block header_container %}
{{ parent() }}
{% block header_content %}
***** child template specific content ****
{% endblock %}
{% endblock %}
{% endblock %}
我对header_content块有两次奇怪的结果:
***** child template specific content **** ***** child template specific content ****
任何想法?
答案 0 :(得分:1)
我认为问题是你有两个header_content
阻止 - 一个在index.twig.html
,第二个在parent()
来电。第二个定义首先覆盖,在编译后会导致重复。
如果您要覆盖默认文字,则应删除parent()
电话。如果要更新(追加)默认文本 - 您应该重构块结构以避免使用相同的名称。
UPD 请尝试以下索引
{# index.html.twig #}
{% extends "AppBundle:TestingTwigUse:base.html.twig" %}
{% block header_content %}
***** child template specific content ****
{% endblock %}
UPD 2 检查此solution
我找到了解决方案。使用block()函数获取子块 内容并将其作为include中的变量传递给header.html.twig 声明
答案 1 :(得分:0)
最终有两个解决方案:
使用'use',我们可以获得我们想要保留的部分,但却失去了继承:
{% block header %}
{% use 'AppBundle:TestingTwigUse:header.html.twig' with header_title as parent_header_title %}
{% block header_title %}
{{ block('parent_header_title') }}
{% endblock %}
***** child template specific content ****
{% endblock %}
结合了包含AND扩展行为的'embeb':
{% block header %}
{% embed 'AppBundle:TestingTwigUse:header.html.twig' %}
{% block header_content %}
***** child template specific content ****
{% endblock %}
{% endembed %}
{% endblock %}