Symfony2如何渲染Checkboxes?

use*_*252 3 choice formbuilder symfony

我有一个formbuilder表单,有多个国家/地区列表.当我在我的表单上呈现它们时,如下所示:

{{ form_widget(edit_form.countries) }}
Run Code Online (Sandbox Code Playgroud)

它们看起来像这样:

<input type="checkbox" name="..." value="AD" /><label for="...">Andorra</label>
<input type="checkbox" name="..." value="AE" /><label for="...">United Arab Emirates</label>
<input type="checkbox" name="..." value="AF" /><label for="...">Afghanistan</label>
Run Code Online (Sandbox Code Playgroud)

我希望每个选项在浏览器中显示在它自己的行上,而不是连续显示.如何在选项周围或之间注入html?或者有一种CSS方法来实现这一目标吗?

谢谢.

Jak*_*las 16

来自Symfony Docs

你基本上需要做的是重载checkbox_widget块.

{% form_theme form _self %}

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

当然,您可以使用CSS将您的小部件放在自己的行中(但这不是Symfony2问题).


小智 8

我发现这样做的更懒惰的方法是遍历表单/选择数组.

最简单的是,渲染一个你可能会做的表格:

{{ form_widget(form) }}
Run Code Online (Sandbox Code Playgroud)

要获得更多粒度,您可以:

{{ form_row(form.itemA) }}
{{ form_row(form.itemB) }}
{{ form_row(form.itemC) }}
Run Code Online (Sandbox Code Playgroud)

但是如果"itemA"是一个多选项,那么你就会被整个列表放在同一行上.如果您在升级主题之前只需要更多粒度,则可以执行以下操作:

{% for t in form.itemA %}
{{ form_row(t) }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这将使每个复选框都显示在自己的行上,或者让您有机会在每个项目之间执行任何操作.