在表单绑定之前克隆实体

时间:2013-06-04 17:57:50

标签: forms symfony entity bind

使用Symfony2,我需要在使用$ form-> bind()之前保存一个实体,以便在刷新之前比较新旧实体。

我尝试了一些功能:

$command = $repository->findCommandProductsByCommand( $id );
$old_command = clone $command;
// OR $old_command = $command;
$form = $this->createForm(new EditCommandType(), $command);

if( $request->getMethod() == 'POST' )
{
    $form->bind($request);
    if ( $form->isValid() )
    {

我试图像这样保存一小部分实体:

$old_command = $command->getCommandProducts();

但是当我尝试使用这些方法之一访问$ old_command的数据时,我只能从表单访问该对象的较新值而不是较旧的值。

$ form-> bind($ request)是主要问题,但我没有找到描述exacly bind()的文档。

祝你好运

解决我的问题(感谢zizoujab)

$command_entries = new ArrayCollection();
foreach ($command->getCommandproducts() as $entry) {
    $command_entries[] = clone $entry;
}

现在我的ArrayCollection $ command_entries没有链接到上一个实体。

1 个答案:

答案 0 :(得分:3)

来自克隆手册:

  

当克隆一个对象时,PHP 5将执行所有的浅层副本   对象的       属性。任何引用其他变量的属性都将保留引用。

我假设getCommandProducts()返回ArrayCollection,因此您将始终获得新列表。

你也必须克隆列表的元素。

这里有完整的解释和解决方案的示例: Symfony2/Doctrine: How to re-save an entity with a OneToMany as a cascading new row