【问题标题】:form_label() not working with boolean typeform_label() 不适用于布尔类型
【发布时间】:2016-09-30 15:05:12
【问题描述】:

我有一个在树枝文件中呈现的表单:

表格:

$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
        ))
    ;

树枝文件:

{% 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 会被布尔值忽略。

【问题讨论】:

    标签: twitter-bootstrap symfony twig


    【解决方案1】:

    猜想:你所有的标签都像tracker.event.labels.XXXXX,最后一个是tracker.event.private.title,不应该是tracker.event.labels.private.title

    【讨论】:

    • 此语法用于翻译,不能关联。我可以更改它以与其他人匹配,但这并不能解决问题。
    【解决方案2】:

    我在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 %}
    

    【讨论】:

      猜你喜欢
      • 2023-01-04
      • 2019-03-19
      • 1970-01-01
      • 2018-02-22
      • 2011-01-17
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      相关资源
      最近更新 更多