问题描述
在我的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()”部分如下所示:
我可以即时添加/修改请假类型。除非我不想批准为已经存在的休假类型修改“余额类型”字段的可能性。对于我要添加的内容,我将可能性留在ChoiceType中。所以从正面看,这很好。但是在背面,不。
但这不起作用
我做什么:
但是当我提交时,我具有相同的值(新值:10)
编辑:当前,我现在是:
$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将对对象的所有属性进行浅表复制。引用其他变量的任何属性都将保留引用。