$('#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
发布于 2018-08-14 05:55:46
仅使用函数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表单组件,将数据submit()
到其中,并正常使用它。form[_token]
字段表明这个表单的超文本标记语言实际上是由Symfony Form组件生成的,所以我看不出在这里不使用它的原因……
希望这能帮到你。
https://stackoverflow.com/questions/51830288
复制相似问题