我有一个视图,我试图覆盖每个单独字段的表单主题http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-field http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-field.
该视图看起来像这样:
{% form_theme form _self %}
{% block _my_form_foo_widget %}
<div class="input-append">
{{ block('number_widget') }}
<span class="add-on">%</span>
</div>
{% endblock %}
<form>
{{ form_row(form.foo) }}
{{ form_row(form.bar) }}
</form>
foo 和 bar 行的一切看起来都符合预期,但是_my_form_foo_widget
块本身也包含在输出中,即:
<div class="input-append">
<span class="add-on">%</span>
</div>
<form>
<div>
<label for="my_form_foo">Bar</label>
<div class="input-append">
<input type="text" id="my_form_foo" name="my_form[foo]">
<span class="add-on">%</span>
</div>
</div>
<div>
<label for="my_form_bar">Foo</label>
<input type="text" id="my_form_bar" name="my_form[bar]">
</div>
</form>
我一生都无法弄清楚我做错了什么。作为解决方法,我只是将块包含在 HTML 注释中。
我使用的是 Symfony 2.4.1 和 Twig 1.15.0。
你正在经历twig
的预期行为。
如果您不这样做,新定义的块将直接在当前模板中呈现延伸另一个模板。
Example:
template_A.html.twig
:
<html>
<body>
{% block content -%}
Foo
{%- endblock -%}
Bar
{%- block more_content -%}
Foo
{%- endblock %}
</body>
</html>
=> 输出:FooBarFoo
(正在渲染模板+主体中存在的所有块)
Example:
template_B.html.twig
:
- 扩展模板不允许有主体
- 只会渲染存在于的块
template_A.html.twig
{% extends 'templateA.html.twig' %}
{% block content -%}
Bar
{%- endblock %}
{% block not_in_template_a %}
Some String
{% endblock %}
=> 输出:BarBarFoo
(但确实not render Some String
因为块not_in_template_a
原始模板中不存在)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)