使用data_class从表单获取实体 - Symfony2中的正确方法

时间:2013-06-26 13:35:08

标签: forms symfony

如果我有一个带有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()。我只是不确定它是否是正确的方式,因为它看起来很讨厌

2 个答案:

答案 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()