У меня есть этот код
->add('user', 'entity', array( 'class' => 'Acme\Entity\User', 'query_builder' => function(EntityRepository $er) use ($options) { return $er->createQueryBuilder('u') ->orderBy('u.name', 'ASC'); }, 'data' => $option['id'] ))
Это не работает
public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('description') ->add('user', 'entity', array( 'class' => 'Acme\Entity\User', 'query_builder' => function(EntityRepository $er) use ($options) { return $er->createQueryBuilder('u'); }, 'preferred_choices' => array('2') )) ; }
Вы можете использовать одно из следующих действий:
Задайте значение по умолчанию для объекта
$cl->setUser($this->getDoctrine()->getEntityManager()->getReference('Acme:User',2));
Используйте предпочтительный вариант выбора в построителе форм:
'preferred_choices' => array('2')
Или установите 'property_path' => false
и используйте 'data' => YourDefaultEnity
Форма должна автоматически сопоставить значение user-> id с выбранным полем выбора объекта. Например, если у вас есть объект Computer, у которого есть отношение OnetoOne с объектом User в таблице соединений, называемой «computer_users»:
class Computer{ private $user; /** * @ORM\OneToOne(targetEntity="ComputerUser", mappedBy="computer") */ private $computerUsers; public function getUser(){ return $computerUsers->getUser(); } private function getComputerUser(){ return $this->$computerUsers; } }
Поле «пользователь» в классе формы должно получить значение user-> id из объекта атрибута «пользователь» в классе «Компьютер», переданном в форму.
Кроме того, вы можете явно установить значение, явно передав объект пользователя в форму с помощью SetData ():
$computerForm = $this->createForm( new ComputerForm(), $computer ); $user = $computer->getComputerUser()->getUser(); $computerForm->get('user')->setData( $user ); return $this->render( 'AcmeBundle:Computer:edit.html.twig' , array( 'computer' => $computer , 'computerForm' => $computerForm->createView() ) );