【问题标题】:Symfony2, How to make a form label class/attr different than its input?Symfony2,如何使表单标签类/属性与​​其输入不同?
【发布时间】:2012-06-10 18:54:25
【问题描述】:

我想构建一个带有标签和输入的表单,但它们的类应该不同。下面的代码为具有相同属性的输入创建标签:

 public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
                ->add('hours', null ,
                  array('attr'=> 
                             array(
                                 'placeholder'=>'Working Hours',
                                 'class'=>'ui-spinner-box') ) )
    }

在我上面的代码中,ui-spinner-box 将为标签和输入输出。它甚至会为其标签放置占位符。

那么如何让它分别为标签创建attr,这样我就可以输出如下内容:

<label class="MYCLASSFOR_LABEL"   for="input_id">Hours</label>
<input class="MYCLASSFOR_INPUTS"  type="text" id="input_id" name="" value="" >

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    documentation中提到的:

    • attr : 将在字段上呈现为 HTML 属性的键值数组
    • label_attr:一个键值数组,将在标签上呈现为 HTML 属性

    您可以在树枝模板或表单构建器中设置这些属性:

    树枝模板:

    • 对于 symfony 2.1 和更新的使用:

      {{ form_label(form.hours, null, {'label_attr': {'class': 'foo'}}) }}
      
    • 在旧的 symfony 2.0 中它曾经是

      {{ form_label(form.hours, { 'label_attr': {'class': 'MYCLASSFOR_LABEL'} }) }}
      {{ form_widget(form.hours, { 'attr': {'class': 'MYCLASSFOR_INPUTS'} }) }}
      

    表单生成器

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('hours', null, array(
            'label_attr' => array('class' => 'MYCLASSFOR_LABEL'),
            'attr'       => array('class' => 'MYCLASSFOR_INPUTS'),
        ));
    }
    

    【讨论】:

    • 其实它必须是:{{ form_label(hours, null, { 'attr': {'class': 'MYCLASSFOR_LABEL'} }) }},因为第二个参数是标签名称。如果你传递 null 它仍然会使用构建表单中设置的值
    • 在 buildForm 中可能而且更容易——看我的回答
    • 对@insertusernamehere 评论的小更新,应该是{{ form_label(hours, null, { 'label_attr': { 'class': 'MYCLASSFOR_LABEL' }}) }}
    • 在文档中的任何地方都找不到这个,但就在上面!
    【解决方案2】:

    以上内容不再正确,至少在我使用它的上下文中。在 Symfony 2.1 中,解决方案是:

    {{ form_label(form.item, label|default(null), { 'label_attr': { 'class': 'MYCLASS' } }) }}
    

    【讨论】:

      【解决方案3】:

      这可能是新的,但现在有一种简单的方法可以做到这一点:

      $builder
          ->add('hours', null , array(
              'attr'=> 
                  array(
                      'placeholder'=>'Working Hours',
                      'class'=>'MYCLASSFOR_INPUTS') 
              ) ,
              'label_attr' => array(
                  'class' => 'MYCLASSFOR_LABEL'
              )
          );
      

      您正在寻找的选项是label_attr

      【讨论】:

      • 正是我想要的
      • 这对单选按钮(选择类型)有何作用? label_attr 似乎只适用于整个标签,而不适用于每个单选按钮选项旁边的标签。
      【解决方案4】:

      这在 Symfony 2.3 中适用于我:

      {{ form_row(form.hours,  {   'label': 'Hours:'
                                  ,'label_attr': {'class': 'MYCLASSFOR_LABEL'}
                                  ,'attr': {'class': 'MYCLASSFOR_INPUTS'} 
                              }
                 )
      }}
      

      【讨论】:

        猜你喜欢
        • 2011-10-07
        • 1970-01-01
        • 2013-07-08
        • 2014-11-05
        • 2013-06-08
        • 2014-01-11
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        相关资源
        最近更新 更多