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="" > ```