我正在尝试构建一个表单以发布新的“调查”,每个调查由“标题”和一组“选项”组成,选项是单独的实体,并通过“ ManyToOne”关联学说链接到“调查”实体
我正在使用CollectionType允许动态创建表单中的字段。然后,我使用JQuery动态创建这些附加表单。
问题在于,一旦我尝试提交表单,它只会提交“调查”对象,而不提交“选项”对象。我知道这一点是因为在查询完这两项之后,“调查”被保存到了数据库中,而选项却没有。
问题是,当我尽可能将表单呈现为准系统而没有其他任何东西时,我的jquery代码仅附加了“数据原型”,而没有任何更改,它可以正常工作。调查和选项已保存。我知道这是因为我已经对其进行了测试。
在工作之后,我决定使表格更具表现力,而且我必须搞砸了。
这是我的表单的呈现HTML: https://pastebin.com/5UuTXy1F
这是相关的HTML,这是JQuery创建字段后的样子。
<div class="survey_option">
<label>1: </label>
<input type="text" id="survey_options_0_title" name="survey[options][0][title]" required="required" maxlength="500">
<button type="button" class="remove_option_link">x</button>
</div>
在每个字段中写入内容并提交后,Options集合为空。
然后我的问题是,为什么在提交表单时表单找不到“选项”?是由于某种原因而看不到输入,还是因为某些属性错误?是因为我的javascript代码做的蠢事吗?
以防万一,这里还有一些其他相关代码: 用于动态添加字段的JQuery脚本:https://pastebin.com/KCdVK60q
SurveyOption表单类型:https://pastebin.com/uGe4rqCF
“调查”表单类型:https://pastebin.com/Zs4BEEKY
以及负责表单处理的控制器功能:https://pastebin.com/zrz0uJei
答案 0 :(得分:0)
我使用的是标签而不是标签;我的SurveyOptionType使用的是TextareaType(疏忽大意,可能是复制了错误的内容)。
最重要的是,{{ form_start(form) }}
Twig标签被放置在元素内部,而{{ form_end(form) }}
被放置在另一个元素内部。这意味着Options
的输入甚至不在表单内。
解决这些问题后,一切都会按预期进行。