微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。