在ajax调用中生成子表单

时间:2012-05-13 21:26:27

标签: forms symfony symfony-forms

我有一个包含子表单集合的表单 - 不同学习的学生 - 关系manyToOne。我有正确的数据库架构,实体和表单生成器运行良好。我不知道如何追加新的“学习”对象。我需要在任何一种情况下从某个地方获取html标签 - 当至少有一个“研究:对象(克隆他)或者没有这样的那个。”

我们假设研究对象有两个字段:名称和年份。如果对于学生有这样的记录(对象),它在生成的表单中的第一个输入具有名称“student [study] [0] [name]”。并被包围。当我点击“添加新学习”按钮时,我想复制这个周围的div并分别更改html表单元素的id和名称。是否有现成的库或方法可供使用?

但到目前为止可能还没有研究记录。所以我需要通过ajax调用从服务器获取表单。不幸的是,返回表单的输入名称为“study [name]”。是否有可能使此表格与第一种情况类似 - 我的意思是“学生[学习] [0] [姓名]”。但我想避免手动生成表格的树枝模板 - 我更喜欢

{{ form_widget(form) }}

1 个答案:

答案 0 :(得分:1)

您应该处理data-prototype而不是发出单独的AJAX请求。添加/删除子表单项的整个概念如下所述:

http://symfony.com/doc/current/reference/forms/types/collection.html#adding-and-removing-items

显然,你需要一些JS(强烈推荐jQuery)才能复制子表单字段。

但是,您应该注意,当您最初拥有空集合或非空集合时,data-prototype的行为会有所不同。至少我遇到过这种奇怪的行为。据我所知,首先,当您说{{ form_rest(form) }}时,DIV附加data-prototype附加了由表单HTML组成的{{1}}属性。在第二种情况下,实际HTML(不作为属性)附加了ID属性“form_name _ $$ name $$”,您需要将$$ name $$替换为适当的索引。

现在,你真的应该看一看 - 也许所有这些都已经修复了一些最近的版本,但我不能确定...

希望这有点帮助...