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 に答える