如果我有一个带有setDefaultOptions方法的FormType对象来设置data_class,我应该如何从中获取实体以保持Doctrine ORM?
$form = $this->createForm(new CarModelsType());
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist(????HERE????);
}
我应该在“???? HERE ????”中放入$ form-> getData()。我只是不确定它是否是正确的方式,因为它看起来很讨厌
答案 0 :(得分:1)
对于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();
//...
}
//...
}
答案 1 :(得分:0)
有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()
!