从Symfony2中的窗体获取数据后克隆对象



我肯定这里缺少一些非常基本的东西。

我有一个表单,当用户更新表单的字段时,我不想更新基础实体,而是想用新值创建一个新实体。

为了克隆条令实体,我遵循了这里的指示。

所以我的代码是(假设我想克隆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();
        }

它根本不起作用。它使用表单传递的新数据正确地创建了一个新对象(这是可以的),但也使用相同的新数据更新"旧"存储对象。

知道吗?

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

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

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

相关内容

  • 没有找到相关文章

最新更新