从 Symfony2 中的表单获取数据后克隆对象
Cloning object after getting data from a form in Symfony2
我确定我在这里遗漏了一些非常基本的东西。
我有一个表单,当用户更新表单的字段时,我不想更新基础实体,而是想创建一个具有新值的新实体。
为了克隆 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" 存储的对象。
有什么想法吗?
您必须在表单创建期间克隆您的对象:
$form = $this->createForm(new BenefitItemFormType(), clone $storedBI);
如果这不起作用,请先尝试 detach
您的克隆对象。
我确定我在这里遗漏了一些非常基本的东西。
我有一个表单,当用户更新表单的字段时,我不想更新基础实体,而是想创建一个具有新值的新实体。
为了克隆 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" 存储的对象。
有什么想法吗?
您必须在表单创建期间克隆您的对象:
$form = $this->createForm(new BenefitItemFormType(), clone $storedBI);
如果这不起作用,请先尝试 detach
您的克隆对象。