gpt4 book ai didi

javascript - Symfony 2 中的 ArrayCollection(表单集合)索引冲突

转载 作者:IT王子 更新时间:2023-10-29 00:08:34 26 4
gpt4 key购买 nike

我正在使用 Symfony2 来构建我的页面。当我尝试更新表单集合时(如食谱条目“How to Embed a Collection of Forms”中所述),我发现前端索引与后端 ArrayCollection 索引发生冲突。

我有关系 User <-> Address (OneToMany)。用户想要创建/更新/删除他的地址,因此他可以在 javascript 部分新地址元素的帮助下在前端添加/删除。他执行以下操作:

(1) 添加新地址(索引:0)

(2) 添加新地址(具有索引:1)并立即再次删除该地址

(3) 添加新地址(索引:2)。

当他点击保存按钮时,以下代码保存/更新用户(及其地址):

 $this->em->persist($user);
$this->em->flush();

例如,新地址会正确保存到数据库中。现在用户想要更新地址,例如索引为 0。当他现在点击保存按钮时,它更新地址为“索引 0”,但与此同时,它再次将地址“索引 2”添加到数据库(对象)。为了更好地理解这个问题,我画了一个小插图(手工制作,抱歉我的艺术技能不好):

Collection error image现在,我的对象/数据库中有两倍于“索引 1”的地址。我知道为什么会这样,这是因为第一个“索引 1”地址被映射到 ArrayCollection 元素“数字 1”,第二个被映射到“数字 2”(因为前端名称“索引 2”)。你可以说:“它只是填满地址,直到它到达后端的前端索引”。但是我该如何解决这个问题呢?

网站说明:使用 ajax 请求时会发生此行为,因为如果您在单击“保存按钮”后重新加载页面,它将使用后端中的索引正确地重新索引前端中的地址。

我对处理这种情况的建议:

在服务器端点击保存后重新索引前端索引指标。这是我的问题的明确/唯一解决方案吗?

最佳答案

是的,这是 Symfony 表单收集的问题,恕我直言,它没有简单的解决方案。但我不得不问为什么你不做与页面刷新完全相同的事情?您只能刷新带有集合的 html 片段。片段的 HTML 代码可以来自服务器端。回到您的问题 - 是的,在您不想尝试自己编写自定义集合类型之前,重新索引是一个很好的解决方案。

symfony/symfony/issues/7828

在集合中验证存在类似问题 - symfony/symfony/issues/7468 .

我认为默认集合类型和 Symfony 文档中的教程有一些缺点。希望对您有所帮助。

关于javascript - Symfony 2 中的 ArrayCollection(表单集合)索引冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090860/

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