我有这段代码
->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')
))
;
}
答案 0 :(得分:5)
您可以使用以下其中一项:
在对象
中设置默认值$cl->setUser($this->getDoctrine()->getEntityManager()->getReference('Acme:User',2));
在表单构建器中使用首选选项:
'preferred_choices' => array('2')
或设置'property_path' => false
并使用'data' => YourDefaultEnity
答案 1 :(得分:0)
表单应自动将user-> id值映射到选定的实体选择字段。例如,如果您的计算机实体与名为“computer_users”的连接表中的用户实体具有OnetoOne关系:
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”字段应该从传递给表单的Computer类中的“user”属性对象中获取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()
)
);