【问题标题】:How do I fix The GET method is not supported for this route如何修复此路由不支持 GET 方法
【发布时间】: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}。还要注意可能嵌套的表单。

标签: php laravel ssh


【解决方案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 中做到这一点
    猜你喜欢
    • 2023-03-03
    • 2021-02-23
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2020-12-06
    相关资源
    最近更新 更多