Подтвердить что ты не робот

Symfony2, Как сделать класс метки метки /attr отличным от его ввода?

Я хотел бы создать форму с меткой и вводами, но класс их должен быть другим. Код ниже создает метку для ввода с тем же attr:

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

В моем коде выше ui-spinner-box будет выводиться как для метки, так и для ввода. Он даже поставит placeholder для своей метки.

Итак, как заставить его создавать attr для метки отдельно, чтобы я мог выводить что-то вроде ниже:

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

Ответ 1

Как указано в документации :

  • attr: массив значений ключа, который будет отображаться как атрибуты HTML в поле
  • label_attr: массив значений ключа, который будет отображаться как атрибуты HTML на ярлыке

Вы можете установить эти атрибуты в шаблоне ветки или в построителе форм:

Шаблон Twig:

  • для 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'),
    ));
}

Ответ 2

Это может быть ново, но есть простой способ сделать это сейчас:

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

Вы можете выбрать label_attr.

Ответ 3

Это работает для меня в Symfony 2.3:

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

Ответ 4

Вышеизложенное перестает быть правильным, по крайней мере, в контексте, который я использовал. В Symfony 2.1 решение:

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