我正在使用Laravel 5.6和MySQL。我将使用以下控制器功能更新学生表:
public function update(Request $request, $id)
{
$students = Student::find($id);
$students->name = $request->input('name');
$students->town = $request->input('town');
$students->save();
}
,更新表单操作如下:
<form action="{{route('student.update',$students->id)}}" method="POST">
{{csrf_field()}}
我的路线是这样定义的:
Route::resource('student','StudentController');
我的问题是,当我单击表单中的更新按钮时,它会生成以下错误消息
1/1)MethodNotAllowedHttpException
怎么了?
答案 0 :(得分:0)
您使用了错误的HTTP方法,update
路由上的Route::resource
方法要求使用PUT / PATCH HTTP方法发送请求。
由于HTTP表单不支持PUT / PATCH作为方法,因此您应该通过在表单内部使用Blade指令@method('PUT')
来欺骗HTTP方法。
<form action="{{route('student.update',$students->id)}}" method="POST">
{{csrf_field()}}
{!! @method('PUT') !!}
</form>
答案 1 :(得分:0)
通过执行以下命令来验证您的路线:
php artisan route:list
并检查您的请求是否以“ PUT或PATCH”发送
我看到您正在尝试更新 $学生。因此,$student->save()
您可以这样:
public function update(Request $request, $id)
{
try
{
$input = $request->all();
$student = Student::where('id',$id)->update($input);
return $student;
}catch(QueryException $ex) {
return ['success'=>false, 'error'=>$ex->getMessage()];
}
}