Symfony2,如何使表单标签class/attr与其输入不同?

PMo*_*bed 37 php forms symfony

我想构建一个带有标签和输入的表单,但它们的类应该是不同的.下面的代码使用相同的attr为输入创建标签:

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

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

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

<label class="MYCLASSFOR_LABEL"   for="input_id">Hours</label>
<input class="MYCLASSFOR_INPUTS"  type="text" id="input_id" name="" value="" >
Run Code Online (Sandbox Code Playgroud)

a.a*_*dad 92

文档中所述:

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

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

树枝模板:

表单构建器

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

  • 实际上它必须是:`{{form_label(hours,null,{'attr':{'class':'MYCLASSFOR_LABEL'}}}}}`因为第二个参数是标签名称.如果传递null,它仍将使用构建表单中设置的值 (12认同)
  • 对@insertusernamehere注释的小更新,它应该是`{{form_label(hours,null,{'label_attr':{'class':'MYCLASSFOR_LABEL'}})}}` (5认同)

Jer*_*rne 49

这可能是新的,但现在有一个简单的方法:

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

你正在寻找的选项是label_attr.

  • 这对单选按钮(选择类型)有何影响?label_attr似乎只适用于整个标签,而不是每个单选按钮选项旁边的标签. (2认同)

Ons*_*hop 7

这在Symfony 2.3中适用于我:

{{ form_row(form.hours,  {   'label': 'Hours:'
                            ,'label_attr': {'class': 'MYCLASSFOR_LABEL'}
                            ,'attr': {'class': 'MYCLASSFOR_INPUTS'} 
                        }
           )
}}
Run Code Online (Sandbox Code Playgroud)


orn*_*rnj 6

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

{{ form_label(form.item, label|default(null), { 'label_attr': { 'class': 'MYCLASS' } }) }}
Run Code Online (Sandbox Code Playgroud)