如何修复此路由不支持 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 执行此操作?我必须为此升级我的主机,所以需要确定。
谢谢
【问题讨论】:
<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