Symfony2, How to make a form label class/attr different than its input?

forms, php, symfony

Solution

As mentioned in the documentation:

- attr : A key-value array that will be rendered as HTML attributes on the field

- label_attr: A key-value array that will be rendered as HTML attributes on the label

You can set those attributes in twig template or in form builder:

Twig template:

for symfony 2.1 and newer use:

{{ form_label(form.hours, null, {'label_attr': {'class': 'foo'}}) }}

in the legacy symfony 2.0 it used to be

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

Form builder

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

Problem

I would like to build a form with label and inputs, but the class of them should be different. Code below creates the label for the input with same attr: ``` public function buildForm(FormBuilder $builder, array $options) { $builder ->add('hours', null , array('attr'=> array( 'placeholder'=>'Working Hours', 'class'=>'ui-spinner-box') ) ) } ``` In my code above the `ui-spinner-box` will be outputted for both label and input. It will even put placeholder for its label. So how to make it create `attr` for label separately so I can output something like below : ``` <label class="MYCLASSFOR_LABEL" for="input_id">Hours</label> <input class="MYCLASSFOR_INPUTS" type="text" id="input_id" name="" value="" > ```

Original source