![](/img/trans.png)
[英]How to properly set 'data_class' for form collection in Symfony2?
[英]Getting entity from form with data_class - the correct way in Symfony2
如果我有一个带有setDefaultOptions方法的FormType对象,该方法设置了一个data_class,那么我应该如何从中获取实体以便持久保存在Doctrine ORM中?
$form = $this->createForm(new CarModelsType());
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist(????HERE????);
}
我应该将$ form-> getData()放在“ ???? HERE ????”中。 我只是不确定它是否正确,因为它看起来很讨厌
对于createAction():
public function createAction(Request $request)
{
$entity = new CarModel();
$form = $this->createForm(new CarModelTypeType(), $entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
//...
}
//...
}
有2种情况。
1)您给表单添加了一个对象:
该对象将自动更新并使用表单中的新值进行水合,您可以保存该对象。
$carModel = ... ; // Get or new object of the entity
$form = $this->createForm(new CarModelsType(), $carModel); // Note, $carModel is given
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($carModel); // Save the object $carModel
$em->flush();
}
2)初始化表格时,您不给任何对象:
因此,您需要使用$form->getData()
检索实体。
$form = $this->createForm(new CarModelsType()); // Note : no object given
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($form->getData()); // You get the object after with $form->getData()
$em->flush();
}
此外 :
注意$form->getData()
始终有效,即使您将一个对象赋给表单! 因此,您可以一直使用$form->getData()
!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.