如何修复Laravel 8中的这个"GET method is not supported for this route"错误?



我正在开发一个需要用户注册和登录的Laravel 8应用程序

有一个用户配置文件页面,经过身份验证的用户可以在其中编辑他/她自己的数据。

在路由文件中,我有:

use IlluminateSupportFacadesRoute;
use AppHttpControllersFrontendHomepageController;
use AppHttpControllersDashboardDashboardController;
use AppHttpControllersDashboardUserProfileController;
Route::get('/', [HomepageController::class, 'index'])->name('homepage');
Auth::routes();
Route::group(['middleware' => ['auth']], function() {
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
Route::get('/dashboard/profile', [UserProfileController::class, 'index'])->name('profile');
Route::post('/dashboard/profile/update', [UserProfileController::class, 'update'])->name('profile.update');
Route::post('/dashboard/profile/deleteavatar/{id}/{fileName}', [UserProfileController::class, 'deleteavatar'])->name('profile.deleteavatar');
});

问题

我在路由/dashboard/profile/update上需要的方法实际上是POST。

然而,每当我在浏览器的地址栏中转到/dashboard/profile/update时,我都会收到错误:

The GET method is not supported for this route. Supported methods: POST.

我希望我没有得到这个错误。我在网上找到的解决方案包括改变方法和其他不令人满意的方法。

使用Route::any会在更新表单中填写验证错误。

当在/dashboard/profile/update上执行GET方法id时(如果,则仅(,我可以重定向到/dashboard/profile/吗?

最简单的方法是什么?

除了这样做,还有什么更好的选择?

首先,您必须在请求中同时允许get和post方法。我用过any,但我们也可以用match

Route::any('/dashboard/profile/update', [UserProfileController::class, 'update'])->name('profile.update');

any将匹配所有类型的请求。所以你可以匹配像这个这样的特定请求

Route::match(['get', 'post'], '/dashboard/profile/update', [UserProfileController::class, 'update'])->name('profile.update');

然后在你的方法

public function update(Request $request){

if($request->isMethod('GET')){

}
if($request->isMethod('POST')){

}
}

如果收到请求,则可以通过web.php:直接重定向到另一条路由

Route::get('dashboard/profile/update', function () {
return redirect(route('dashboard.profile'));
});

相关内容

  • 没有找到相关文章

最新更新