在我的laravel 5.4 app中,我有一个crud模块。对于编辑位,数据以引导模式呈现。数据被成功拉出但是在点击更新按钮时,会返回显示的错误。
这里我的刀片形式是在模态中呈现的:
<form id="formEdit" class="form-horizontal" role="form" method="put">
//form elements
</form>
这里是处理它的ajax:
//edit_id is defined globally
$('#updateClass').click(function(){
var name = $("#formEdit #name").val();
var status = ($('#formEdit #status').prop("checked") == true) ? 1 : 0;
var token = $('meta[name="csrf-token"]').attr('content');
var id = edit_id;
var url = "classes/update/"+id;
var formdata = {
'name' : name,
'status' : status,
'_token' : token
};
$.ajax({
method: "PUT",
url: url,
data: formdata,
dataType: "json"
})
.done(function(data) {
//
})
.fail(function(data) {
//
});
});
});
updateClass
是在模态上显示编辑表单的按钮。
这是web.php
中的路线:
Route::resource('classes', 'ClassesController');
Route::group(['prefix' => 'admin'], function () {
Route::get('classes', 'ClassesController@index');
Route::get('classes/edit/{id}', 'ClassesController@edit');
Route::put('classes/update/{id}', 'ClassesController@update');
});
最后,我在类控制器中的更新函数:
public function update(Request $request, $id)
{
$validator = $this->validator($request->all());
$errors = $validator->errors();
$errors = json_decode($errors);
if ($validator->passes())
{
Dl_class::find($id)->update($request->all());
return response()->json();
}
else
{
return response()->json($errors, 422);
}
}
我错过了什么?
答案 0 :(得分:2)
要从表单发送PUT
请求,您需要发送名为method
的hiddne输入元素。像这样:
<input type='hidden' name='_method' value='PUT'>
有一个帮助方法可以做同样的事情:
{{ method_field('PUT') }}
只有这样,Laravel才能识别您的PUT
请求。
或者,您也可以将此值包含在您的ajax调用中,例如:
var formdata = {
'name' : name,
'status' : status,
'_token' : token,
'_method' : 'PUT'
};