我有以下树枝模板
{%- block block1 -%}
<div class="test">
{{ block('block2') }}
</div>
{%- endblock block1 -%}
{%- block block2 -%}
<div>Test2</div>
{%- endblock block2 -%}
结果是:
<div class="test">
<div>Test2</div>
</div><div>Test2</div>
但应该是:
<div class="test">
<div>Test2</div>
</div>
我想要像symfony中的表单模板一样:https://github.com/symfony/symfony/blob/2.7/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
更新:
唯一的解决方案是添加一个看起来不太好的if false:
{%- block block1 -%}
<div class="test">
{{ block('block2') }}
</div>
{%- endblock block1 -%}
{% if false %}
{%- block block2 -%}
<div>Test2</div>
{%- endblock block2 -%}
{% endif %}
答案 0 :(得分:2)
为什么要以这种方式定义块?换句话说:你可以简单地在第一个块中定义第二个块,如下所示:
{%- block block1 -%}
<div class="test">
{%- block block2 -%}
<div>Test2</div>
{%- endblock block2 -%}
</div>
{%- endblock block1 -%}
答案 1 :(得分:1)
如果您以不同的方式分离结果,它将帮助您了解正在发生的事情:
// block1 with block2 inserted
<div class="test">
<div>Test2</div>
</div>
// block2
<div>Test2</div>
即。当你定义block2时,它不仅插入到block1中,它还会在定义它的地方渲染。您可以尝试以其他方式构建此功能,可能使用include
函数
答案 2 :(得分:1)
你必须添加你的表单主题来渲染这些自定义块,或者像Carlos Granados这样说你必须在这里添加其他树枝。
你要显示的是哪个链接是symfony2表单主题,它将在表单块调用时呈现,并且它正在执行它,因为你告诉symfony2这样做。在你的布局树枝上添加这样的文件 -
{% form_theme form "UrBundle:Default:fields.html.twig" %}
它将是您的文件,它将呈现您的块 - fields.html.twig, 在这里,您可以定义您的块,然后可以访问当前的块 -
{% block block1 %}
{{ parent() }}
{% endblock %}
它会像你想要的那样link
答案 3 :(得分:0)
在树枝中,即使使用extends
,渲染的主模板也将始终渲染模板中“包含”的所有块。相反,您尝试创建水平重用块。
为了产生所需的结果,您需要实现{% use 'blocks.twig' %}
这种方法在很大程度上取决于您要完成的工作,而常规模板通常不需要这种方法。
{# main.html.twig #}
{% use 'info.blocks.twig' %}
{%- block content -%}
{%- set data = { name: 'Test', place: 'Test2' } -%}
{{ block('data') }}
{%- endblock -%}
{# info.blocks.twig #}
{%- block data -%}Data {{ data.name }} {{ block('data_place') }}{%- endblock -%}
{%- block data_place -%}{{ data.place }}{%- endblock -%}
结果:
Data test test2
请记住,use
上有一些限制。
use
标签仅在不扩展另一个模板的情况下才导入 模板(如果未定义宏)以及主体为空。但 它可以使用其他模板。
所以你不能做
{# main.html.twig #}
{% use 'info.blocks.twig' %}
{# info.blocks.twig #}
{% extends 'other.blocks.twig' %}
{%- block data -%}Data {{ data.name }} {{ block('data_place') }}{%- endblock -%}
{%- block data_place -%}{{ data.place }}{%- endblock -%}