繁体   English   中英

使用data_class从表单获取实体-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM