Параметры выбора формы symfony2

Я пытаюсь сделать простую форму, чтобы добавить активность с именем и цветом.

Поэтому я хочу создать список с некоторым цветом, потому что теперь он работает, у меня есть имя цвета.
Я могу добавить любой атрибут в свой тег select:

$form = $this->createFormBuilder($myclass) ->add('Colors','choice',array('label'=>'select some colors', 'multiple'=>true, 'choices'=>array(1=>'red', 2=>'blue', 3=>'green'), 'attr'=>array('style'=>'width:300px', 'customattr'=>'customdata') )); 

Результат будет примерно таким:

 <select name="select" style="width: 300px;" multiple="multiple" customattr="customdata"> <option value="1">red</option> <option value="2">blue</option> <option value="3">green</option> </select> 

Но как я могу добавить selected="selected" и любой атрибут, который я хочу использовать для своих опций выбора? как это:

 <select name="select" style="width: 300px;" multiple="multiple" customattr="customdata"> <option style="background-color: #F00;" value="1" selected="selected">red</option> <option style="background-color: #00F;" value="2" selected="selected">blue</option> <option style="background-color: #0F0;" value="3">green</option> </select> 

Мой вопрос: как я могу добавить пользовательский attr для тега option (не для тега select ) с помощью symfony FormBuilder.
ВНИМАНИЕ. Я не хочу использовать JavaScript. Я хочу использовать symfony2 FormBuilder для настройки моих опций выбора.

Solutions Collecting From Web of "Параметры выбора формы symfony2"

Обычно данные по умолчанию для поля определяются значением, хранящимся в вашем объекте. Например, если

 class MyClass { private $Colors = array(1, 2); } 

то по умолчанию будут отображаться записи «1» и «2» (с надписями «красный» и «зеленый»). Вы также можете сохранить это значение в объекте, прежде чем передавать его в форму:

 $myObject->Colors = array(1, 2); $form = $this->createFormBuilder($myObject) ... 

Последняя возможность заключается в переопределении значения по умолчанию, хранящегося в объекте, путем передачи опции «данные»:

 $builder->add('Colors', 'choice', array( 'label' => 'select some colors', 'multiple' => true, 'choices' => array(1 => 'red', 2 => 'blue', 3 => 'green'), 'attr' => array('style' => 'width:300px', 'customattr' => 'customdata'), 'data' => array(1, 2), )); 

используйте параметр данных, как описано здесь fo selected = "selected": http://symfony.com/doc/current/reference/forms/types/field.html

в ур случае может быть так

 $form = $this->createFormBuilder($myclass) ->add('Colors','choice',array('label'=>'select some colors', 'multiple'=>true, 'choices'=>array(1=>'red', 2=>'blue', 3=>'green'), 'attr'=>array('style'=>'width:300px', 'customattr'=>'customdata'), 'data'=> 1 )); 

новый элемент – это данные, устанавливающие количество массива выбора в качестве выбранного атрибута

Каждое Field в symfony наследуется от абстрактного типа поля , у которого есть опция data , в которой вы можете перейти по умолчанию.

Кстати, не пропускайте style , а для пользовательских attrs используйте атрибуты data-* .

Похоже, Symfony 2.7 добавит поддержку, чтобы сделать это проще:

https://github.com/symfony/symfony/pull/14050

Добавить в метод класса формы Symfony \ Component \ Form \ AbstractType :: finishView

 public function finishView(FormView $view, FormInterface $form, array $options) { parent::finishView($view, $form, $options); $additionalAttributes = array(); // myMethod - method $choice, returns a value that is to be substituted into the attribute foreach ($view->children['orders']->vars['choices'] as $id => $choice) { $additionalAttributes[$id] = array( 'data-cost' => $this->propertyAccessor->getValue($choice->data, 'myMethod'), 'disabled' => 'disabled', ); } foreach ($view->children['orders']->children as $id => $child) { $child->vars['attr'] = array_replace( isset($child->vars['attr']) ? $child->vars['attr'] : array(), $additionalAttributes[$id] ); } } 

Symfony2 Form – добавить параметр тега атрибута в поле выбора типа

Чтобы добавить свой собственный атрибут в выбор, в зависимости от значения этого выбора, рассмотрите возможность использования опции choice_attr в поле ChoiceType .

Например, если вы хотите передать json закодированную сущность в этот параметр, вы можете использовать что-то вроде этого:

 'choice_attr' => function($val, $key) { return ['data-object' => json_encode($val)]; },