【问题标题】:update method issue(The POST method is not supported) in laravellaravel 中的更新方法问题(不支持 POST 方法)
【发布时间】:2020-07-09 17:18:28
【问题描述】:

我想创建更新方法,代码如下:

Route::get("/allProducts/edit/{id}","AllproductController@edit")->name('Allproduct.edit');
Route::post("/allProducts/update/{id}","AllproductController@update")->name('Allproduct.update');
<form class="form-horizontal tasi-form" method="post" enctype="multipart/form-data"
                      action="{{ route('allProducts.update' , [ 'id'=>$allproduct->id ]) }}">
                    {{ csrf_field()}}

  public function update(Request $request, $id)
    {
       $data = Allproduct::find($id);

        $data->name = $request->name;
        $data->save();

        return redirect(route('allProducts.index'));
    }

当我点击提交按钮时,它会显示:

“此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE”错误!

有什么问题?

【问题讨论】:

标签: laravel


【解决方案1】:

您的路线名称不匹配。

在路线中: name('Allproduct.update');

形式: 所有产品.update

此外,由于控制台命令,您始终可以检查路线的名称:

php artisan route:list

如果你想使用 PUT 方法:

您可以更改路线中的方法:

Route::post 到 Route::put

并在表单中添加下一个:

<input type="hidden" name="_method" value="PUT"> 

@method('PUT') 

如果您的 laravel 版本是 6,如果您的版本是另一个,请检查在 laravel.com/docs/6.x/routing 的表单中使用 PUT 方法的正确方法与您的版本。

【讨论】:

  • 正如我在路由列表中看到的,我应该使用 put 或 patch!但我不知道如何
【解决方案2】:

正如here所说的

HTML 表单不支持 PUT、PATCH 或 DELETE 操作。因此,在定义从 HTML 表单调用的 PUT、PATCH 或 DELETE 路由时,您需要向表单添加隐藏的 _method 字段。 _method 字段发送的值将用作 HTTP 请求方法:

所以你的表单应该是这样的:

<form class="form-horizontal tasi-form" method="post" enctype="multipart/form-data" action="{{ route('Allproduct.update' , [ 'id'=>$allproduct->id ]) }}"> @csrf @method('PUT')

您的路线名称中有错字,并且缺少 method 字段。

将您的路线更改为:

Route::put("/allProducts/update/{id}","AllproductController@update")->name('Allproduct.update');

这会起作用,但是 我强烈建议您阅读此laravel naming conventions,然后将您的控制器和模型的名称更改为 AppProductController、AppProduct。

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 2021-04-11
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2021-08-05
    • 2020-02-07
    • 2020-06-05
    • 2020-03-21
    相关资源
    最近更新 更多