【问题标题】:Laravel Route resource does not update when form is posted发布表单时,Laravel Route 资源不会更新
【发布时间】:2019-05-30 17:59:04
【问题描述】:

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

怎么了?

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    您使用了错误的 HTTP 方法,Route::resource 路由上的 update 方法要求使用 PUT/PATCH HTTP 方法发送请求。

    由于 HTTP 表单不支持 PUT/PATCH 作为方法,您应该通过在表单中​​使用 Blade 指令 @method('PUT') 来欺骗 HTTP 方法。

    <form action="{{route('student.update',$students->id)}}" method="POST">
        {{csrf_field()}}
    
        {!! @method('PUT') !!}
    </form>
    

    【讨论】:

    • 现在我正在使用类似&lt;form action="{{route('student.update',$students-&gt;id)}}" method="PUT"&gt; 这样的新表单,但现在没有任何错误但没有将数据更新到数据库中
    • Noo, method="POST" 但在表单中使用 Blade 指令来模拟 PUT 请求,请参见上面的示例。
    • 好,Aleksa 应该是{!! method_field('PUT') !!},你能在你的答案中更正它吗?因为需要接受你的回答
    【解决方案2】:

    通过执行命令验证您的路线:

    php artisan route:list

    并检查您的请求是否使用“PUT 或 PATCH”发送

    我看到您正在尝试更新 $student。所以改为$student-&gt;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()];
        }
     } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多