form_label()不使用布尔类型

时间:2016-06-01 09:57:58

标签: twitter-bootstrap symfony twig

我有一个用twig文件渲染的表单:

表格:

$builder

        ->add('text', CKEditorType::class, array (
            'config_name' => 'my_config',
            'label' => "tracker.event.labels.text"

        ))

        ->add('effTime', IntegerType::class, array (
            'data' =>  0,
            'label' => "tracker.event.labels.efftime"
        )) 

        ->add('private', CheckboxType::class, array(
            'label' => "tracker.event.private.title",
            'data' => false,
            'required' => false
        ))
    ;

twig file:

{% form_theme formadd 'AtgpAppBundle:_Form:_form.html.twig' %}

                    {{ form_start(formadd) }}
                    {{ form_errors(formadd) }}
                    <div class ="row">
                        <span class="col-md-2">
                            {{form_label(formadd.text)}}
                        </span>
                        <span class="col-md-10">
                            {{form_errors(formadd.text)}}
                            {{form_widget(formadd.text)}}
                        </span>
                    </div>
                    <div class="row">
                        <span class="col-md-2">
                            {{form_label(formadd.effTime)}}
                        </span>
                        <span class="col-md-10">
                            {{form_errors(formadd.effTime)}}
                            {{form_widget(formadd.effTime)}}
                        </span>
                    </div>
                    <div class="row">
                        <span class="col-md-2"> 
                            {{form_label(formadd.private)}}
                        </span>
                        <span class="col-md-1">
                            {{form_errors(formadd.private)}}
                            {{form_widget(formadd.private) }}
                        </span>
                        <span class="col-md-9">
                            {{ "tracker.event.private.help" |trans }}
                        </span>
                    </div>
                    {{ form_end(formadd) }}

除最后一行外,一切都很顺利。

col-md-2,其中“private”的标签应为空。

由于某种原因,form_widget创建了另一个

<div class="row"> 

跨度“class = col-md-1”

标签和内部的复选框。

Here's how the whole row renders

我希望标签在正确的位置正确显示。简单地忽略了form_label()指令,如果我不写它,它会呈现相同的颜色。

我该怎么做,我的代码出了什么问题?

谢谢

编辑:我发现我可以将标签值设置为false并直接在twig中写入。 但是我仍然不知道为什么用布尔值忽略指令form_label。

2 个答案:

答案 0 :(得分:0)

狂野猜测:您的所有标签都像tracker.event.labels.XXXXX,而最后一个标签tracker.event.private.title不应该是tracker.event.labels.private.title

答案 1 :(得分:0)

我在the documentation找到了我的问题的答案。

我们可以读到这个:

当您使用Bootstrap表单主题并手动呈现字段时,为复选框/无线电字段调用form_label()不会显示任何内容。由于Bootstrap内部,标签已经由form_widget()显示。

所以我需要做的是从这个覆盖checkbox-widget块:

{% block checkbox_widget -%}
    {%- set parent_label_class = parent_label_class|default(label_attr.class|default('')) -%}
    {% if 'checkbox-inline' in parent_label_class %}
        {{- form_label(form, null, { widget: parent() }) -}}
    {% else -%}
        <div class="checkbox">
            {{- form_label(form, null, { widget: parent() }) -}}
        </div>
    {%- endif %}
{%- endblock checkbox_widget %}

对此:

{% block checkbox_widget %}
        <input type="checkbox" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
{% endblock %}