如何修复此路由不支持 GET 方法

Posted

技术标签:

【中文标题】如何修复此路由不支持 GET 方法【英文标题】:How do I fix The GET method is not supported for this route 【发布时间】:2021-12-29 09:48:44 【问题描述】:

是的,有几个这样的问题,是的,我已经研究过了!我已经看了几天了,我已经失去了活下去的意愿。

我有一个主要工作的网站。我有一个使用 post 向数据库添加记录的页面,这很有效。我有另一个页面使用相同的方法添加到不同的表中,但不起作用。疯子。

在不起作用的页面上:

我的表格:

<form actio="route('site',$site->id)/" method="post">
        @csrf

我的路线:

Route::post('/site/id', [SiteController::class, 'store'])->name('site');

我的控制器:

public function store()
    $site = new Site ();
    $site->location = request("location");
    $site->rating = request("rating");
    $site->x_coord = request("x_coord");
    $site->y_coord = request("y_coord");
    $site->save();
    return redirect('/location/'.request("location"))->with('mssg','Marker added');

错误;

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

我试过了:

诸如将方法更改为 GET 之类的事情,我什至将 @method=('POST') 放在那里以防万一。

我看到过有关使用 php artisan 清除路径的帖子,这是我唯一没有尝试过的方法,但你是怎么做到的呢?在上传之前,我已经尝试在 vscode 本地进行,但没有成功。我是否通过 SSH 执行此操作?我必须为此升级我的主机,所以需要确定。

谢谢

【问题讨论】:

&lt;form actio= ?? n 在哪里 fyi,“我什至放了@method=('POST')”,如果没有=,那将是@method('POST') 这两个都是很好的观察结果,我把错误放在这篇文章中是因为我太累了,但我的页面中没有错误(我只是希望检查一下)。感谢您指出。 检查您的浏览器网络控制台。您是否正在发送 POST 请求?如果不是,则路由信息无关紧要。 显然是路由问题。您是否尝试过将路线更改为完全不同的名称/结构?前任。从/site/id/testingThis/id。还要注意可能嵌套的表单。 【参考方案1】:

我注意到您的代码中有一些错误。试试这个代码:

刀片文件:

<form action="route('site', $site->id)" method="POST">
    @csrf
    <input type="text" name="location" placeholder="location" required>
    <input type="text" name="rating" placeholder="rating" required>
    <input type="text" name="x_coord" placeholder="x_coord" required>
    <input type="text" name="y_coord" placeholder="y_coord" required>
    <input type="submit" value="submit">
</form>

路由/web.php 文件:

Route::post('site/id', 'SiteController@store')->name('site');

站点控制器文件:

use Illuminate\Http\Request;
use App\Site;

class SiteController extends Controller

    public function store(Request $request, $siteId)
        Site::create([
            'location'=>$request->location,
            'rating'=>$request->rating,
            'x_coord'=>$request->x_coord,
            'y_coord'=>$request->y_coord,

        ]);
        return redirect()->back()->with('mssg','Marker added');
    

使用此代码,您可以存储具有给定值的模型。但我仍然不确定你为什么要使用 $site->id?你没有在控制器中使用它,那为什么它甚至在那里?

【讨论】:

【参考方案2】:

我们需要添加PUT方法。

<form actio="route('site',$site->id)/" method="post">
@csrf

 method_field('PUT') 
== OR ==
<input type="hidden" name="_method" value="PUT">
== OR ==
@method('PUT')

并清除路由缓存。

php artisan route:cache

【讨论】:

谢谢@ferar-ravi -- 我知道如何在本地清除路由,但您是说要在服务器上执行此操作吗?如果是,我使用 SSH 还是什么?如果是,那么我需要升级我的托管计划 清除路由不重要,但是put方法很重要,所以请添加put方法。谢谢【参考方案3】:

尝试将您的路线更改为:

Route::any('/site/id', [SiteController::class, 'store'])->name('site');

看看它是如何发送数据的。在此处发布整个表格。那肯定有错误。

【讨论】:

我已经尝试过 ANY 路线但没有成功,我如何在 Laravel 中发布整个表单?我可以在老派 php 中做到这一点

以上是关于如何修复此路由不支持 GET 方法的主要内容,如果未能解决你的问题,请参考以下文章

此路由不支持 GET 方法。支持的方法:POST。 laravel 5.8 阿贾克斯

此路由不支持 GET 方法。支持的方法:POST。在插入/存储

此路由 Laravel + ConfirmBox 不支持 GET 方法

错误:此路由不支持 POST 方法。支持的方法:GET、HEAD。 - 使用 laravel livewire

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

laravel向我显示此错误此路由不支持POST方法。支持的方法:GET,HEAD,PUT,DELETE