如何在 Symfony2 中设置复选框的样式?

How to set styles for checkboxes in Symfony2?

我在使用 FormBuilder 呈现的复选框时遇到问题。

问题是在<label></label>里面生成了<input/>。结果如下:

我不知道应该如何将此复选框的格式设置为图像右侧的状态。我检查了文档,但没有找到任何可以访问以更改此字段呈现方式的方法。

树枝:

{{ form_widget(form.colors, { 'attr': {'class': 'MY-CLASS'} } ) }}

HTML 结果:

<div id="template_colors" class="MY-CLASS">
    <input type="checkbox" id="template_colors_0" name="template[colors][]" value="white">
    <label for="template_colors_0">White</label>

    <input type="checkbox" id="template_colors_1" name="template[colors][]" value="red">
    <label for="template_colors_1">Red</label>

    <input type="checkbox" id="template_colors_2" name="template[colors][]" value="black">
    <label for="template_colors_2">Black</label>
</div>

这更像是一个 CSS 问题。如果输入在标签内,您可以轻松地将所有内容放入内联。这是 Bootstrap 用于执行此操作的代码: https://github.com/twbs/bootstrap/blob/master/less/forms.less#L210

如果您想在表单上使用 Bootstrap 样式,您可以使用 Symfony 中的 Bootstrap form theme

如果您想自定义某个字段类型及其呈现方式,您可以为此创建一个表单主题。以下是更多详细信息:http://symfony.com/doc/current/cookbook/form/form_customization.html#what-are-form-themes

希望对您有所帮助

您可以通过多种方式更改复选框的呈现方式。我将向您展示最简单的一个(在示例中,我假设 form.colors 作为包含 choice 元素的变量):

<div class="" style="display: inline-block;">
{% for color in form.colors %}
   <label class="check">
   {{ form_errors(color) }}
   {{ form_widget(color) }}
   <span>{{ color.vars.label }}</span>
   </label>
{% endfor %}
</div>

这会输出如下内容:

<div class="" style="display: inline-block;">
    <label class="check">
    <input type="radio" id="whatever" name="whatever" required="required" value="whatever" checked="checked">
    <span>Red</span>
    </label>
    <label class="check">
    <input type="radio" id="whatever" name="whatever" required="required" value="whatever" checked="checked">
    <span>Blue</span>
    </label>                        
</div>

但这只是一个示例,您可以按照自己喜欢的方式进行格式化。您也可以像往常一样将 class 属性传递给它们中的任何一个。

如果您想要一行四个复选框,则类似于:

{# Wrap span around checkboxes #}
{{ form_label(form.fees) }}
{{ form_errors(form.fees) }}<br>
{% for batch in form.fees|batch(4) %}
    <div class="batchRow">
        {% for option in batch %}
            <div class="yourClassName">
                {{ form_label(option) }}
                {{ form_widget(option) }}
            </div>
        {% endfor %}
    </div>
{% endfor %}

否则可以去掉batch level