如何覆盖 Symfony 的 Twig 表单模板中的复选框

Gil*_*ino 5 forms checkbox overriding symfony twig

我目前正在尝试覆盖 Symfony 2 中复选框块的默认呈现,但我无法达到预期的结果。

我创建了一个名为“类别”的 Doctrine 实体,并且所有视图都已正确创建。

但是 Twig 表单中的默认复选框标签的位置不正确。

PS.:我从这里的元素中删除了属性,以使其更清晰易读。

原样:

<label>Field</label>
<input type="checkbox" />
Run Code Online (Sandbox Code Playgroud)

应该:

<label><input type="checkbox" />Field</label>
Run Code Online (Sandbox Code Playgroud)

我创建了一个模板来覆盖块本身:

{% block checkbox_widget %}
{% spaceless %}
<label for="{{ id }}">
<input type="checkbox" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
{{ label|trans({}, translation_domain) }}</label>
{% endspaceless %}
{% endblock checkbox_widget %}
Run Code Online (Sandbox Code Playgroud)

并在我的 edit.html.twig 文件中调用它:

{% extends '::base.html.twig' %}
{% form_theme edit_form 'AppGallerySiteBundle:Form:fields.html.twig' %}
Run Code Online (Sandbox Code Playgroud)

在表单内,我放置了以下几行:

{{ form_errors(edit_form) }}
{{ form_row(edit_form) }}
{{ form_widget(edit_form) }}
{{ form_rest(edit_form) }}
Run Code Online (Sandbox Code Playgroud)

这有效并且复选框被覆盖,但是默认树枝表单模板中的普通标签继续显示,我的覆盖复选框没有显示其中的标签,导致:

<label>Field</label>
<label><input type="checkbox" /></label>
Run Code Online (Sandbox Code Playgroud)

应该在哪里:

<label><input type="checkbox" />Field</label>
Run Code Online (Sandbox Code Playgroud)

希望有人能帮忙。提前致谢。

小智 5

您应该禁用复选框的渲染标签。所以你需要form_label像这样覆盖块:

{% block form_label %}
{% if 'checkbox' not in block_prefixes %}
  {{ parent() }}
{% endif %}
{% endblock form_label %}
Run Code Online (Sandbox Code Playgroud)