$('#form_save').on( 'click', function (e) {
e.preventDefault();
var form = $(this).closest('form');
var formData = form.serializeArray();
alert(formData.toSource());
$.ajax({
method:'POST',
url:'{{ path('edit_form', { 'slug': page.slug }) }}',
data: formData,
success: function(data){
alert("success");
}
});
});
var formData
给我以下警报输出:
[{name:"form[username]", value:"1"}, {name:"form[email]", value:"1@12.sw"}, {name:"form[is_active]", value:"1"}, {name:"form[plainPassword][first]", value:""}, {name:"form[plainPassword][second]", value:""}, {name:"form[_token]", value:"MdSCmPgzZC3pZaW2wK2Rk"}]
现在如何在控制器中使用它来将其存储到数据库中?
public function form($slug, Request $request){
$id = $request->request->get('id');
$item = new User();
$item= $this->getDoctrine()->getRepository(User::class)->find($id);
if($request->request->get('data')){
$data = $request->request->get('data');
$entityManager = $this->getDoctrine()->getManager();
$entityManager->flush();
}
}
我收到错误消息:
The identifier id is missing for a query of App\Entity\User
答案 0 :(得分:2)
由于您使用的是jQuery,并且您只是尝试提交一个编辑用户表单,因此我最初建议使用malsup's ajaxForm plugin。当然,您可以使用FormData和ajax请求实现相同的功能。
如果您使用ajaxForm插件,则只需要正确设置表单的操作即可(路由应如下所示: / edit-user / 1 其中1是用户的ID),而javascript代码将如下所示:
$('form#your-form').ajaxForm({
success: function(response){ alert("success"); }
});
Symfony控制器将如下所示:
public function form(User $user, Request $request){
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->flush();
}
return $this->json('success');
}
答案 1 :(得分:0)
仅用于此目的的功能serializeArray
几乎没有用。为了使其正常工作,您的控制器应该知道您正在传输数据的格式,并且默认情况下,Symfony的控制器根本不希望使用这种格式。
最好的方法是以key:value
而不是{name: key, value: value}
格式序列化数据。
对于转换数据,我不会重复社区拥有的答案:Convert form data to JavaScript object with jQuery
一旦您拥有key:value
格式的数据,我想您就可以更改控制器了。例如:
$data = json_decode($request->getContent(), true);
var_dump($data['form[email]']);
以上内容应输出1@12.sw
。这有点笨拙,但应该可以。在我看来,您应该真正使用Symfony Form组件,submit()
将数据添加到该组件,并通常使用它。 form[_token]
字段表明此表单的HTML实际上是由Symfony Form组件生成的,因此我在这里也看不到不使用它的原因...
希望这对您有帮助...