Symfony 2在用户站点上向表单动态添加字段


Symfony 2 dynamically add field to form on user site

我正在处理调查捆绑包。目标是为用户提供一个全面有效的调查系统。我已经准备了一个后端,允许您创建调查、添加问题(打开文本、单选按钮、复选框)、是否需要问题、激活调查、生成令牌并在电子邮件中发送带有令牌的调查链接。当然,我也有显示调查和保存答案的前端。现在我想添加另一种可能性。带有答案(单选框或复选框)和注释的问题。例如:

你有狗吗?

如果用户选择"是",则应显示带有问题"狗的名字是什么?"的附加字段,并允许用户输入狗的名字。如果用户选择"否",则不会发生任何事情。

这样简单的问题可能有隐藏的字段,但如果我有20个问题有这样的"额外"信息呢?

你知道symfony中的一些机制可以让我这么做吗?我试着与听众交流,但无法创造出任何灵活和通用的东西(我可以用复选框提问,其中一些问题的答案可以有其他字段,而不必)。

我有一种感觉,你不能只通过FormType和形成事件监听器来实现这一点。如果您的目标是在同一表单中根据用户的选择显示/隐藏其他问题,那么您还需要使用一些javascript。FormType仅生成表单字段(以及任何嵌入/嵌套的表单)。所有其他UI交互或动态验证都应该使用JavaScript和FormEvent侦听器进行。

我要做的是有一个事件监听器,它将一个属性(即data-has-additional)添加到所有问题单选框/复选框(它们有额外的问题/字段)。然后我会有一个jquery on()侦听器,它会检查radio/checkbox是否被选中/取消选中,并根据状态显示/隐藏其他字段。您应该能够对此进行抽象,并使其成为适用于所有"附加问题"的通用javascript。

然后,我会创建事件侦听器来检查提交的表单是否有效(即,如果您有一个额外的问题,需要插入一些文本,等等)。

另一种方法可能是研究一些"多步骤形式束"。其中一些可能已经实现了类似的选项,这可能会帮助您进行开发。