我正在开发一个需要用户注册和登录的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'));
});