发布表单时,Laravel Route资源不会更新

时间:2019-01-04 06:50:57

标签: php laravel-5

我正在使用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

怎么了?

2 个答案:

答案 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()];
    }
 }