如何为Laravel所有资源路由名称统一添加admin.前缀
Laravel 后台资源路由统一添加名称前缀实现方案
当前现状
当前项目中定义的后台资源路由如下:
Route::resource('/admin/users', \App\Http\Controllers\AdminUsersController::class); Route::resource('/admin/posts', \App\Http\Controllers\AdminPostsController::class); Route::resource('/admin/categories', \App\Http\Controllers\AdminCategoriesController::class); Route::resource('/admin/media', \App\Http\Controllers\AdminMediasController::class); Route::resource('/admin/comment/replies', \App\Http\Controllers\CommentRepliesController::class); Route::resource('/admin/comments', \App\Http\Controllers\PostCommentsController::class) ;
查看路由列表后,当前生成的路由名称均无admin.前缀,例如分类路由名称为categories.index、用户路由名称为users.index。
需求
- 为所有后台资源路由的名称统一添加
admin.前缀,例如将users.index调整为admin.users.index、users.store调整为admin.users.store,所有资源路由按该规则统一生效 - 不接受逐一对单个
resource路由传入names数组单独配置路由名的实现方式,例如下方写法不采用:
Route::resource('/admin/users', \App\Http\Controllers\AdminUsersController::class, ['names'=>['index'=>'admin.users.index']]);
实现方法
直接使用路由组统一配置路径前缀和路由名称前缀,把所有后台资源路由放到组内即可,无需单独修改每个资源路由的配置:
Route::prefix('admin') // 统一设置路径前缀,替代每个路由里重复写的/admin ->name('admin.') // 统一设置路由名称前缀,注意末尾的点不能漏写 ->group(function () { Route::resource('/users', \App\Http\Controllers\AdminUsersController::class); Route::resource('/posts', \App\Http\Controllers\AdminPostsController::class); Route::resource('/categories', \App\Http\Controllers\AdminCategoriesController::class); Route::resource('/media', \App\Http\Controllers\AdminMediasController::class); Route::resource('/comment/replies', \App\Http\Controllers\CommentRepliesController::class); Route::resource('/comments', \App\Http\Controllers\PostCommentsController::class); });
效果说明
- 路由访问路径和原有逻辑完全一致,不会改变原有接口地址
- 组内所有资源路由会自动在默认生成的路由名前拼接
admin.前缀,直接得到预期的admin.users.index、admin.categories.index这类命名 - 后续新增后台路由时,只要放到该路由组内,会自动继承路径和名称前缀,无需重复配置
内容的提问来源于stack exchange,提问作者r0pe-12
相关产品推荐
相关产品推荐

