Symfony 3.x - 多对多额外字段表单集合
Symfony 3.x - Many to many extra field form collection
我会尽量简短。
案例:
我有一个实体要处理比方说 "Hotel Rooms",一个实体要处理 "Room's spec" 和一个中间实体 "Room has spec"。这是 2xOneToMany 中的多对多转换。
我需要什么:
当我为 "Hotel room" 构建表单时,会构建一个包含 "Room's specs" 完整列表的复选框列表。
显然我需要检查任何现有的 "room spec" 房间是否真的有它(中间实体 table 内的一行)。最初的情况是取消选中所有 "Room's spec" 列表。
我的选择:
- 删除中间实体,因为它实际上只是一个 true/false 行,但是我需要让 symfony 明白如果 M-M 关系中不存在任何行,那么房间就没有那个规格,另一方面,如果该行存在,则房间具有规格。我真正担心的是,在不久的将来,我的客户将需要一些数字,例如房间有多少镜子
- 使用 allow_add 选项使所有这些东西成为标准的 Symfony 表单集合,使所有行都由用户手动创建。不是有史以来最好的用户体验,但它可能是一个解决方案
- 在控制器内部手动处理列表创建、编辑、删除,繁琐工作
代码:
编写表单生成器的正确和最佳方法(如果存在)是什么?
如果有人想在这里着陆,那么解决方案非常简单,您需要做的就是确保在房间和规格之间声明 link 使用 ManyToMany,然后在房间表单中您可以使用EntityType 并将 'expanded' 选项设置为 TRUE
我会尽量简短。
案例:
我有一个实体要处理比方说 "Hotel Rooms",一个实体要处理 "Room's spec" 和一个中间实体 "Room has spec"。这是 2xOneToMany 中的多对多转换。
我需要什么:
当我为 "Hotel room" 构建表单时,会构建一个包含 "Room's specs" 完整列表的复选框列表。 显然我需要检查任何现有的 "room spec" 房间是否真的有它(中间实体 table 内的一行)。最初的情况是取消选中所有 "Room's spec" 列表。
我的选择:
- 删除中间实体,因为它实际上只是一个 true/false 行,但是我需要让 symfony 明白如果 M-M 关系中不存在任何行,那么房间就没有那个规格,另一方面,如果该行存在,则房间具有规格。我真正担心的是,在不久的将来,我的客户将需要一些数字,例如房间有多少镜子
- 使用 allow_add 选项使所有这些东西成为标准的 Symfony 表单集合,使所有行都由用户手动创建。不是有史以来最好的用户体验,但它可能是一个解决方案
- 在控制器内部手动处理列表创建、编辑、删除,繁琐工作
代码:
编写表单生成器的正确和最佳方法(如果存在)是什么?
如果有人想在这里着陆,那么解决方案非常简单,您需要做的就是确保在房间和规格之间声明 link 使用 ManyToMany,然后在房间表单中您可以使用EntityType 并将 'expanded' 选项设置为 TRUE