Symfony 2 – Тип формы формы: как отформатировать сгенерированный раскрывающийся список?

У меня есть форма, которая показывает раскрывающееся меню категорий на выбор.

Эти категории настраиваются с использованием расширения Gedmo Tree Extension, поэтому категория может иметь дочерние категории.

У меня есть собственный запрос в построителе форм, который выбирает только те категории, которые принадлежат к определенной группе. Тем не менее, мне нужно показать в раскрывающемся списке, какие категории являются родителями, а какие – детьми, например

Parent Category 1 -- Child Category A -- Child Category B Parent Category2 -- Child Category C 

Любая идея, как я могу это достичь?

Кроме того, как передать переменную в свой query_builder, с контроллера, который вызывает форму?

Если вам не нужно выбирать родителя, вы можете использовать тег optgroup

 <select> <optgroup label="Category 1"> <option>Option 1...</option> <option>Option 2...</option> <option>Option 3...</option> </optgroup> <optgroup label="Category 2"> <option>Option 1...</option> <option>Option 2...</option> <option>Option 3...</option> </optgroup> </select> 

Редактировать:

Symfony 2 поддерживает тег optgroup с массивами (непроверенный, может содержать ошибки) :

 public function buildForm(FormBuilder $builder, array $options) { $category_choices = array( array('Category 1' => array( '1' => 'Option 1...', '2' => 'Option 2...', '3' => 'Option 3...' )), array('Category 2' => array( '4' => 'Option 4...', '5' => 'Option 5...' )) ); $builder->add('category_list', 'choice', array( 'label' => 'Category', 'choices' => $category_choices )); } 

Несколько дней назад я искал то же самое! Я использовал решение Neurofr здесь: Symfony2, Doctrine Extensions Tree: Создание «древовидного» раскрывающегося списка Выберите список

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

Расширьте Symfony \ Bridge \ Doctrine \ Form \ ChoiceList \ EntityChoiceList и используйте его в formBuilder, например:

 $formBuilder ->add('parent', 'entity', array( 'label' => 'Parent', 'em' => $em, 'class' => 'w3des\\Bundle\\SiteBundle\\Entity\\Menu', 'choice_list' => new MenuChoiceList($em, $group, $cfg['tree']), 'required' => false, 'empty_value' => '----' )); 

Вы должны перезаписать: getEntity (), getEntities (), getIdentifierValues ​​() и, возможно, тоже конструктор