当我试图在表单中添加新元素时,Symfony2表单在提交时无效
Symfony2 Form becomes invalid on submit when I am trying to append new elements in form
我在表单中添加了一个按钮Add部分。当用户单击该按钮时,会打开一个提示窗口。提示窗口询问section id之后,它调用ajax从数据库中获取section数据,并创建具有相应字段的section表单。然后我将该子表单(即section表单)附加到现有表单中。但当我提交表单时,symfony会抛出错误,即表单无效。因此,基本上symfony表单不接受附加在现有表单上的新创建的子表单
这就是我在symfony控制器中添加按钮的方式
$formBuilder-> add('new_sections','hidden',array())
->add('add','button', array(
'label' => 'Add Section',
))
在trick文件中,Jquery正在将新字段附加到按钮上的现有表单上单击
$('#form_add').click(
function(){
var section_id = prompt("Please enter your Section ID");
console.log(section_id);
$.ajax({url: url, success: function(result){
var new_section_form ='' +
'<div style="border-style: solid; margin-top: 15px; border-radius: 3px; border-width: 1px; padding: 10px;">'+
'<label class="required">'+result['section']['section_id']+'</label>'+
'<div id="form_'+result['section']['section_id']+'" class="SectionForms">'+
' <div><label for="form_'+result['section']['section_id']+'_weight'+result['section']['section_id']+'">Weight </label><input type="text" id="form_'+result['section']['section_id']+'_weight'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][weight'+result['section']['section_id']+']" value="0"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_label'+result['section']['section_id']+'" class="required">label </label><input type="text" id="form_'+result['section']['section_id']+'_label'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][label'+result['section']['section_id']+']" required="required" value="Text Description v2"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_active'+result['section']['section_id']+'" class="required">Active </label><input type="text" id="form_'+result['section']['section_id']+'_active'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][active'+result['section']['section_id']+']" required="required" value="1"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_link'+result['section']['section_id']+'">Link </label><input type="text" id="form_'+result['section']['section_id']+'_link'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][link'+result['section']['section_id']+']"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_events_max'+result['section']['section_id']+'">events_max </label><input type="text" id="form_'+result['section']['section_id']+'_events_max'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][events_max'+result['section']['section_id']+']"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_events_min'+result['section']['section_id']+'">events_min </label><input type="text" id="form_'+result['section']['section_id']+'_events_min'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][events_min'+result['section']['section_id']+']"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_module'+result['section']['section_id']+'">module</label><input type="text" id="form_'+result['section']['section_id']+'_module'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][module'+result['section']['section_id']+']"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_module_icon'+result['section']['section_id']+'">module_icon </label><input type="text" id="form_'+result['section']['section_id']+'_module_icon'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][module_icon'+result['section']['section_id']+']" value="icon_generic"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_module_id'+result['section']['section_id']+'">module_id </label><input type="text" id="form_'+result['section']['section_id']+'_module_id'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][module_id'+result['section']['section_id']+']"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_apicall'+result['section']['section_id']+'">apicall </label><input type="text" id="form_'+result['section']['section_id']+'_apicall'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][apicall'+result['section']['section_id']+']" value="1"></div>'+
'<div><label for="form_'+result['section']['section_id']+'_template_static'+result['section']['section_id']+'">template_static </label><input type="text" id="form_'+result['section']['section_id']+'_template_static'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][template_static'+result['section']['section_id']+']"></div>'+
'<input type="hidden" id="form_'+result['section']['section_id']+'_changed'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][changed'+result['section']['section_id']+']" class="changedField" value="2">'+
' <div><button type="button" id="form_'+result['section']['section_id']+'_delete_'+result['section']['section_id']+'" name="form['+result['section']['section_id']+'][delete_'+result['section']['section_id']+']" class="btn-delete">Delete Section No. '+result['section']['section_id']+'</button></div>'+
'</div>'+
'</div>'
$('.SectionForms').last().parent().after(new_section_form);
$('#form_new_sections').val($('#form_new_sections').val()+" "+result['section']['section_id']);
}});
});
但当我提交表格时,它没有进入表格有效块
if ('POST' === $request->getMethod()) {
$form->handleRequest($request);
if ($form->isValid()) {
// not entering in this block
}
}
自从Symfony 2.6以来,您可以通过将其添加到表单选项中来消除此错误:
'allow_extra_fields' => true,
请参阅此处了解更多信息
相关文章:
- Javascript更新孙窗口中的表单元素
- 阻止表单元素提交
- 使用带有.net autopostback的ryanfait.com自定义表单元素
- 使用javascript更改表单元素的ID值
- HTML5在提交并显示所需标签后显示隐藏的表单元素
- 为什么表单元素不应命名为submit
- 如何重置搜索表单中的特定表单元素
- 使用 ng-repeat访问 ng 表单元素/值
- 获取电子邮件附件的表单元素
- AJAX和php脚本后添加的表单元素未传输到$_POST
- 如何对未知表单元素进行表单验证
- 不显示为表单元素的图像输入按钮的动态创建和appendChild
- 在JavaScript中为表单元素生成键值对
- 表单元素上的jQuery focusout事件即使在单击子元素时也会被触发
- 如何在 OnKeyPress 事件后获取输入表单元素的值
- 表单元素值更改后的角度 JS 验证
- 使用 javascript 中的表单元素构建一个 xml 字符串
- 如何以角度访问表单元素的$valid
- 如果选择了多个选项,则使用 jQuery 显示隐藏的表单元素
- JSON 填充的表单元素不使用 angularJs 过滤器进行过滤