Twig表单主题_self自定义个别字段

5

我有一个视图,我正在尝试为每个字段单独覆盖表单主题。参考资料: 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解析错误。你尝试将<span>中的更改为其他字符(例如+)了吗?如果可以,请尝试使用{{'%'}}替换。进一步地,您可以尝试将覆盖块移动到一个不同的模板中(例如form_theme.html.twig),并使用{% form_theme form 'form_theme.html.twig' %} - Nicolai Fröhlich
清除缓存并将“%”更改为其他内容没有任何区别。 - enoshixi
你没有尝试我的建议,使用外部的form_theme :) 你没有继承另一个模板 - 这就是为什么该块直接渲染出来。 - Nicolai Fröhlich
是的,我不想使用外部form_theme。我希望能够将“一次性”类型的行/小部件自定义与其表单放在同一个文件中。 - enoshixi
1个回答

10

您正在经历 twig 的预期行为。

如果您没有扩展另一个模板,那么新定义的块将直接在当前模板中呈现。


例子:

template_A.html.twig

  • 具有主体(=块外代码)=> 块直接呈现

<html>
<body>
{% block content -%}
Foo
{%- endblock -%} 

Bar

{%- block more_content -%}
Foo
{%- endblock %}
</body>
</html>
输出: FooBarFoo(所有在模板中出现的块都被渲染,包括正文)

示例:

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(但是不会呈现Some String,因为原始模板中不存在not_in_template_a块)。

3
谢谢。我最终创建了一个只有一个空块的模板,然后继承它。我认为Symfony文档中的示例是具有误导性(或者完全是错误的)。 - enoshixi
是的,我认为它应该有更好的文档记录:https://github.com/symfony/symfony-docs/issues/5475 - MacDada

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接