从Symfony2中的表单获取数据后克隆对象

时间:2015-03-25 19:10:49

标签: symfony doctrine-orm symfony-forms

我确定我在这里遗漏了一些非常基本的东西。

我有一个表单,当用户更新表单的字段时,我不想更新底层实体,但想要创建一个包含新值的新实体。

为了克隆Doctrine实体,我遵循了指示here

所以我的代码是(让我们说我要克隆id = 3的对象:

    $id = 3;
    $storedBI = $this->getDoctrine()
                     ->getRepository('AppBundle:BenefitItem')
                     ->find($id);
    $form = $this->createForm(new BenefitItemFormType(), $storedBI);

    $form->handleRequest($request);

    if ($form->isValid())
        {
            $em = $this->getDoctrine()->getManager();  
            $newBI = clone $form->getData();
            $em->persist($newBI);
            $em->flush();
        }

它根本不起作用。它正确地创建了一个新对象,其中包含从表单传递的新数据(这是正常的),但也会更新" old"存储的对象具有相同的新数据。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您必须在表单创建过程中克隆您的对象:

$form = $this->createForm(new BenefitItemFormType(), clone $storedBI);

如果这不起作用,请先尝试detach克隆的对象。