Группы опций в форме формы объекта symfony2

Есть ли способ, которым поле объекта можно показать сгруппированным в группах опций в symfony2 (v.2.1), например, у меня есть что-то вроде этого в моем классе формы:

$builder->add('account', 'entity', array( 'class' => 'MyBundle\Entity\Account', 'query_builder' => function(EntityRepository $repo){ return $repo->findAllAccounts(); }, 'required' => true, 'empty_value' => 'Choose_an_account', ); 

Но (конечно) они отображаются, поскольку класс репозитория читает его из db, и я хотел бы отображать их, сгруппированные в combobox. В этом сообщении упоминается, что он добавлен в версию 2.2, но какие параметры у нас есть у пользователей 2.1?

Группировка будет основана на поле под названием « Type , скажем, у меня есть getter для вызываемого getType() в моей учетной записи, который возвращает строку.

Благодарю.

Аналогичным образом я работал с категориями.

Во-первых, когда вы создаете форму, передайте список вариантов в результате функции getAccountList() следующим образом:

  public function buildForm(FormBuilderInterface $builder, array $options){ $builder ->add('account', 'entity', array( 'class' => 'MyBundle\Entity\Account', 'choices' => $this->getAccountList(), 'required' => true, 'empty_value' => 'Choose_an_account', )); } 

Функция должна делать что-то вроде следующего (содержимое зависит от того, как вы структурируете результат).

 private function getAccountList(){ $repo = $this->em->getRepository('MyBundle\Entity\Account'); $list = array(); //Now you have to construct the <optgroup> labels. Suppose to have 3 groups $list['group1'] = array(); $list['group2'] = array(); $list['group3'] = array(); $accountsFrom1 = $repo->findFromGroup('group1'); // retrieve your accounts in group1. foreach($accountsFrom1 as $account){ $list[$name][$account->getName()] = $account; } //....etc return $list; } 

Конечно, вы можете сделать это более динамично! Шахта – всего лишь краткий пример!

Вы также должны передать EntityManager в свой собственный класс формы. Итак, определите конструктор:

 class MyAccountType extends AbstractType { private $em; public function __construct(\Doctrine\ORM\EntityManager $em){ $this->em = $em; } } 

И передайте EntityManager когда вы инициируете объект MyAccountType .