0

如果我有一个带有设置 data_class 的 setDefaultOptions 方法的 FormType 对象,我应该如何从中获取实体以保留在 Doctrine ORM 中?

$form = $this->createForm(new CarModelsType());
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist(????HERE????);
        }

我应该把 $form->getData() 放在“??????HERE????”中。我只是不确定这是否是正确的方法,因为它看起来很讨厌

4

2 回答 2

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();

        //...
    }
    //...
 }
于 2013-06-26T14:19:39.850 回答
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()一直使用!

于 2013-06-26T14:23:07.770 回答