Как добавить пользовательские атрибуты в элементы опций в Symfony 2 form builder

Я пытаюсь добавить пользовательские атрибуты к элементам опции, используя symfony2 form builder im im не уверен, что это изначально возможно. Если это не так, мне нужно знать, как я буду добавлять функциональность.

возьмите в качестве примера следующую форму:

class FooForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('user','choice',array(
            'choices' => array(
                 'designers'=>'designers',
                 '1'=>'mike',
                 '2'=>'carroll',
                 'developers'=>'developers',
                 '3'=>'chase',
                 '4'=>'brett',
                 '5'=>'jordan',
             )
        ));
    }
}

тогда при визуализации мне нужно, чтобы он выглядел так:

<select>
    <option value="" disabled="disabled">designers</option>
    <option value="1">mike</option>
    <option value="2">carroll</option>
    <option value="" disabled="disabled">developers</option>
    <option value="3">chase</option>
    <option value="4">brett</option>
    <option value="5">jordan</option>
</select>

то, что я ожидал бы что-то вроде:

class FooForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('user','choice',array(
            'choices' => array(
                 'designers'=>array(
                      'label'=>'designers',
                      'attr'=>arrry('disabled'=>'disabled')
                 ),
                 '1'=>'mike',
                 '2'=>'carroll',
                 'developers'=>array(
                      'label'=>'developers',
                      'attr'=>arrry('disabled'=>'disabled')
                 ),
                 '3'=>'chase',
                 '4'=>'brett',
                 '5'=>'jordan',
             )
        ));
    }
}

но это не работает. Так что любая помощь в этом будет очень признателен.

3 ответов


это возможно для choice с 2.7. Посмотреть здесь. С choice_attr.


вам может потребоваться создать собственный виджет, расширенный из виджета "выбор".

таким образом, Вы сможете использовать пользовательский рендеринг для своих параметров, и вы сможете настроить все, что хотите, в атрибутах для каждого параметра.

NB: я выглядел так же, но использовал простой "выбор", и в шаблоне я добавил JS var с дополнительными параметрами (массив со значениями из "select" и заданными дополнительными атрибутами). Я применяю каждый дополнительный атрибут на основе значений параметра he при загрузке страницы событие.


пожалуйста, используйте этот код ниже для набора атрибутов в symfony2

->add('birthdate', 'date',array(
      'input' => 'datetime',
      'widget' => 'single_text',
      'attr' => array('class'=>'calendar')
 ))