【发布时间】:2015-01-06 17:10:18
【问题描述】:
我正在使用 Symfony 2.5.3 版,我正在尝试使用 Ajax 提交表单。 所以,在我的控制器中,我有
$form = $this->createForm(
new MyFormType(),
$formvariable
);
$form->handleRequest( $request );
if ($form->isValid()) {
// do stuff
} else {
// other stuff
}
而我的 jQuery 脚本可能与此类似:
formdata = $('form[name=MyFormTypeForm]').serialize();
$.ajax({
type: "POST",
url: // my url,
data: formdata ,
async: true,
dataType: "json",
success: function(response)
{
// stuff here
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
// stuff there
},
});
这可以正常工作,但不幸的是,我必须将其他变量与表单的字段一起发送。
我想在我的 jQuery 中做的是这样的:
formdata = $('form[name=MyFormTypeForm]').serialize();
value = {
myvar1 : data1 ,
myvar2 : data2 ,
formdata : formdata ,
};
$.ajax({
type: "POST",
url: // my url,
data: value ,
async: true,
dataType: "json",
success: function(response)
{
// stuff here
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
// stuff there
},
});
但是这样$form->isValid()在控制器内部总是返回false。
有没有办法解决这个问题?
提前谢谢你
阿尔伯托
编辑: 添加一些额外的细节,以回应 cmets:
我无法在我的表单中添加一些额外的字段,因为额外的变量用于生成表单本身。
控制器的更多细节:
$em = $this->getDoctrine()->getManager();
$action = $request->request->get('action', null);
$myentid = $request->request->get('myentid', null);
// Here I determine if I have to create a form for a new entity or an
// entity already present in the database
if ( empty($myentid) )
{
// New entity
$formvariable = new MyEntity();
} else {
// Retrieve entity from database
$formvariable = $this->getDoctrine()->getManager()
->getRepository('MyBundle:MyEntity')
->find($myentid);
}
$form = $this->createForm(
new MyFormType(),
$formvariable
);
// I am requesting a new form: render the form and send to page
if ($action == "newform")
{
$response["code"] = $this->render('MyBundle:Controller:mytwigview.html.twig', array(
'form' => $form->createView(),
))->getContent();
return new Response(json_encode($response));
}
// The form has already been filled: save
if ($action == "save")
{
$form->handleRequest( $request);
if ($form->isValid()) {
$em->flush();
} else {
echo "Errors: ".$form->getErrors();
}
}
// And here I return the save confirmation
【问题讨论】:
-
如何将额外的数据作为隐藏输入添加到表单中?
-
不幸的是,这是不可能的。我需要这些额外的数据来有效地生成与表单数据相关联的表单。
-
Wenn 额外的数据用于生成表单......而不是应该可以将其注入表单本身......你是如何生成它的?你能把这个添加到你的问题中吗?
-
编辑了我原来的问题以满足您的要求。
-
看来您正在尝试合并新操作和编辑操作,对吧?