Laravel中带中间件的认证路由组如何添加路由前缀?
问题:为已配置中间件的路由组添加路由前缀
我有两类路由:
- 访客与已认证用户均可访问;
- 仅已认证用户可访问。
针对仅已认证用户的路由,我已使用['auth', 'role:user,admin']中间件,现需为其添加路由前缀。现有代码如下:
Route::prefix('guests')->group(function () { Route::get('/user_landing', [EngineController::class, 'user_landing'])->name('user_landing'); }); Route::middleware(['auth', 'role:user,admin'])->group(function () { Route::get('/user_landing', [EngineController::class, 'user_landing'])->name('user_landing'); });
解决方案
Laravel支持路由组方法的链式调用,直接在middleware()之后追加prefix()方法即可为整个认证路由组添加统一前缀。示例如下(这里以添加dashboard前缀为例):
Route::prefix('guests')->group(function () { Route::get('/user_landing', [EngineController::class, 'user_landing'])->name('guest.user_landing'); }); Route::middleware(['auth', 'role:user,admin']) ->prefix('dashboard') // 此处添加路由前缀 ->group(function () { Route::get('/user_landing', [EngineController::class, 'user_landing'])->name('auth.user_landing'); });
补充说明
- 添加前缀后,该组内所有路由的访问路径都会带上前缀,比如上述认证路由的访问路径变为
/dashboard/user_landing - 建议修改路由名称(如
guest.user_landing和auth.user_landing),避免同名称路由出现覆盖冲突
内容的提问来源于stack exchange,提问作者Gandalf
相关产品推荐
相关产品推荐

