gpt4 book ai didi

forms - 在表单绑定(bind)之前克隆实体

转载 作者:行者123 更新时间:2023-12-04 04:54:42 25 4
gpt4 key购买 nike

使用 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) 是主要问题,但我没有找到描述 bind() 的确切作用的文档。

最好的祝福

我的案例的解决方案(感谢 zizoujab)
$command_entries = new ArrayCollection();
foreach ($command->getCommandproducts() as $entry) {
$command_entries[] = clone $entry;
}

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

最佳答案

从克隆手册:

When an object is cloned, PHP 5 will perform a shallow copy of all of the object's
properties. Any properties that are references to other variables, will remain references.



我假设 getCommandProducts()返回 ArrayCollection所以你总是会得到新的名单。

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

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

关于forms - 在表单绑定(bind)之前克隆实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com