Symfony 5-在提交表单之前获取旧的收藏数据

问题描述

在我的symfony 5项目中,我想提交某种形式,比较提交前后的实体。

因此请保留原始实体的副本以执行处理。

我有:

$parametresAdmin = $entrepriseService->getParametresAdmin();

        $form = $this->createForm(ParametresAdminType::class,$parametresAdmin,[
            'entreprise' => $this->getUser()->getEntreprise(),]);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            $entrepriseService->updateParametres($parametresAdmin);

             return $this->redirectToRoute('admin_parametres');
        }

实际上,我想获得一份$parametresAdmin->getTypesConges()(这是OneToMany上的收藏)的副本。

因此,提交表单时,我想比较旧的$parametresAdmin->getTypesConges()和新的$parametresAdmin->getTypesConges()

“ $ parametresAdmin-> getTypesConges()”部分如下所示:

enter image description here

我可以即时添加/修改请假类型。除非我不想批准为已经存在的休假类型修改“余额类型”字段的可能性。对于我要添加的内容,我将可能性留在ChoiceType中。所以从正面看,这很好。但是在背面,不。

但这不起作用

我做什么:

我将第一行的“ Solde initial”更改为:

enter image description here

但是当我提交时,我具有相同的值(新值:10)

enter image description here

编辑:当前,我现在是:

        $parametresAdmin = $entrepriseService->getParametresAdmin();
        $typeConges = $parametresAdmin->getTypesConges();
        $oldTypesConges = clone $typeConges;

        $form = $this->createForm(ParametresAdminType::class,]);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            $typeConges = $parametresAdmin->getTypesConges(); // update with new data
            dd($oldTypesConges,$parametresAdmin->getTypesConges());

            $entrepriseService->updateParametres($parametresAdmin);

            return $this->redirectToRoute('admin_parametres');
        }

解决方法

您应该像这样克隆数据:

$typeConges = $parametresAdmin->getTypesConges();
$oldTypeConges = clone $typeConges;
// handleRequest(),isValid(),isSubmit() ...
$typeConges = $parametresAdmin->getTypesConges(); // update with new data
dd(oldTypeConges,$parametresAdmin->getTypesConges());

phpdoc说到:

克隆对象后,PHP将对对象的所有属性进行浅表复制。引用其他变量的任何属性都将保留引用。

看看this question on stackoverflow

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...