该路由不支持POST方法。支持的方法:GET,HEAD。拉拉韦尔

Joh*_*521 5 php laravel

我的编辑页面有问题。当我提交时出现此错误:此路由不支持POST方法。支持的方法:GET,HEAD。我不知道它来自哪里,因为我对laravel很陌生。

路线(web.php):

Route::group(['middleware' => 'auth'], function () {
Route::get('/', 'ProjectController@index');

Route::get('/projects/{id}', 'ProjectController@show');
Route::post('/create','ProjectController@store');
Route::get('/create', 'ProjectController@create');
Route::get('/projects/{id}/delete', 'ProjectController@destroy');
Route::put('/edit','ProjectController@update');
Route::get('/projects/{id}/edit', 'ProjectController@edit');

});
Run Code Online (Sandbox Code Playgroud)

控制器:

 public function edit($id)
    {
        return view('project.edit',[

            'project' => Project::find($id)
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request)
    {
        $project = Project::find($request->id);
        $project->project_name = $request->input('project_name');
        $project->client = $request->input('client');
        $project->description = $request->input('description');
        $project->time_span = $request->input('time_span');
        $project->text_report = $request->input('text_report');
        $project->created_by = $request->input('created_by');

        $project->save();

        return  redirect('/')->with('success', 'Project aangepast');
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

在此处输入图片说明

形成:

sto*_*2m1 32

我知道这不是 OP 帖子的解决方案。但是,当我搜索此错误的答案时,这篇文章是 Google 索引的第一篇文章。出于这个原因,我觉得这将使其他人受益。

以下错误...

此路由不支持 POST 方法。支持的方法:GET、HEAD。

是因为没有清除路由缓存

php artisan route:cache
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用“php artisanroute:cache”,则请求将从缓存的路由正确路由,如果您使用“php artisanroute:clear”,则请求将从“web.php”路由。缓存路由用于生产时的性能优化。在开发过程中,您不得缓存路由,否则每次更改时都必须使用“route:clear”和“route:cache”,这是不可取的 (4认同)
  • 这不是由不清除缓存引起的。在某些情况下它可能会解决问题。 (2认同)

小智 6

我在 web.php 中看到你的代码如下:

Route::post('/edit/{id}','ProjectController@update');
Run Code Online (Sandbox Code Playgroud)

第 1 步:删除 {id} 随机参数,如下所示:

Route::post('/edit','ProjectController@update');

第 2 步:然后删除表单中的 @method('PUT'),假设我们只是简单地使用POST方法

那么如何将 ID 传递给我的方法呢?

第 1 步:例如在您的表单中使用 hidden 属性创建一个输入字段

<input type="hidden" value="{{$project->id}}" name="id">

第 2 步:在控制器的更新方法中,获取该 ID,例如:

$id = $request->input('id');
Run Code Online (Sandbox Code Playgroud)

那么您可能无法使用它来查找要编辑的项目

$project = Project::find($id)
//OR
$project = Project::where('id',$id);
Run Code Online (Sandbox Code Playgroud)


小智 6

在表单上添加@method('PUT')

经验:

<form action="..." method="POST">

@csrf  

@method('PUT')



</form>
Run Code Online (Sandbox Code Playgroud)


Kha*_* Nd 5

您可以通过多种方式处理此问题:

  1. 如果您坚持使用PUT,则可以将form操作更改为,POST并添加一个method_field具有值PUT的隐藏项和一个隐藏的csrf字段(如果您使用的是Blade,则只需添加@csrf_field{{ method_field('PUT') }})。这样,表单将接受请求。

  2. 您只需将route和form方法更改为即可POST。因为您是定义路由而不使用资源组的人,所以它将很好地工作。

  • @JohnSmith2521 尝试传递项目 ID,就像您为编辑所做的那样`Route::put('/edit/{id}','ProjectController@update');` 问题是它没有找到项目使用提供的 ID。路线本身现在运作良好。这意味着您没有发送 ID 或请求丢失。您可以在检查元素网络标头中检查请求。 (3认同)
  • @JohnSmith2521 你是如何重定向到路线的?网址正确吗? (2认同)
  • @JohnSmith2521 你也改变了路线动作吗? (2认同)
  • 让我们[在聊天中继续讨论](https://chat.stackoverflow.com/rooms/190074/discussion-between-khaldoun-nd-and-johnsmith2521)。 (2认同)

Har*_*osh 5

我刚刚删除了 url 末尾的斜杠,它开始工作...... /managers/games/id/push/到:

$http({
  method: 'POST',
  url: "/managers/games/id/push",
Run Code Online (Sandbox Code Playgroud)

这可能与升级到 Laravel 5.8 有关?


小智 5

在我的情况下,只需运行命令并像魅力一样工作。

php artisan route:clear
Run Code Online (Sandbox Code Playgroud)