Symfony2,如何使表单标签类/属性与​​其输入不同?

Posted

技术标签:

【中文标题】Symfony2,如何使表单标签类/属性与​​其输入不同?【英文标题】:Symfony2, How to make a form label class/attr different than its input? 【发布时间】: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="" >

【问题讨论】:

【参考方案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' 
                        
           )

【讨论】:

以上是关于Symfony2,如何使表单标签类/属性与​​其输入不同?的主要内容,如果未能解决你的问题,请参考以下文章

如何将类属性设置为 Symfony2 表单输入

自定义 Symfony2 过滤器未使用自定义树枝标签触发

Symfony2 表单用数据预填充字段

如何覆盖 FOS 用户捆绑表单标签

如何使用 messages.en.yml 翻译 symfony2 形式的标签?

Symfony2 表单和 <input> 模式属性