具有预填充数据的Symfony表单

时间:2016-06-07 12:27:05

标签: php forms types symfony

我遇到了在下一个场景中找到实现Symfony表单的最佳方法的麻烦:

我有一组实体来存储清单目录(清单 - > Groups-> Tasks-> CorrectiveActions),这些清单可以由实体工作站实施。

在此实施中,电台将为每项任务提供分数,如果分数低于5,将为该任务显示一系列纠正措施,每个纠正措施将有一个复选框,因此电台可以选择实施它。 ..

我在原始html中编码了表单的外观:

How the form looks like

我的问题是我不知道如何将其迁移到Symfony类型表单。

我不知道如何加载未映射字段列表(组,任务和纠正措施),然后创建与映射字段的关系(每个任务选择得分,每个任务选择纠正措施)

显然我不是要求我可以复制和粘贴的代码,我需要有关如何实现这个或一些可以帮助我的文档的想法。

我正在使用Symfony 3.1.0和下一个实体:

Checklist-> ChecklistGroup-> ChecklistGroupTask-> ChecklistGroupTaskCorrective     v v v StationChecklist - > StationChecklistTask - > StationCheckListTaskCorrectives

没有创建StationChecklistGroup,因为我不打算向组添加任何类型的字段,或者我应该添加它吗?

修改 如果它有帮助,这是我的数据库结构,也许我可以更好地实现它(缺少一些字段)。这是西班牙语,但我认为你可以理解它,punto_venta是我的站点实体: DB Mapping

1 个答案:

答案 0 :(得分:0)

你的问题在某些方面非常模糊,所以我会尽力帮助你:

  • 要处理表单元素的集合(例如您的任务组),您应该使用CollectionType

  • 使用未映射的表单将数据转换为真实实体是对Form组件的不可理解的使用,因此请尝试使用data_classes创建FormTypes。

  • IMO你应该为每个映射它的实体都有一个FormType。因此,当用户创建核对表时,渲染一个ChecklistFormType,它将具有groups字段(CollectionType GroupFormTypes)。然后使用GroupFormType字段tasks CollectionType)等创建CorrectiveActionsFormType

  • 之后,我们面临的挑战是让您的代码可以重复使用Stations,但我在这里对您的模型提出疑问:StationChecklistsChecklists真的不同吗? StationChecklistTasks而不是ChecklistGroupTasks?也许您可以使用接口或超类来更好地映射这些类似的实体,然后让FormType映射这些接口/超类,而不是实际的子实体。