Hyperf路由分组怎么定义_Hyperf路由组管理和嵌套操作【介绍】

2次阅读

hyperf 路由分组通过 router::addgroup() 统一管理前缀、中间件和嵌套路由,支持前缀拼接、中间件继承、多层嵌套及完整控制器路径调用,提升可读性与维护性。

Hyperf路由分组怎么定义_Hyperf路由组管理和嵌套操作【介绍】

Hyperf 中的路由分组(Route Group)主要用于对具有相同前缀、中间件或命名空间的路由进行统一管理,提升代码可读性和维护性。它不是简单拼接路径,而是通过 addGroup 方法构建逻辑分组,并支持多层嵌套与中间件继承。

基础路由分组定义方式

使用 Router::addGroup() 方法创建分组,第一个参数为公共前缀,第二个参数为闭包,在其中注册子路由:

  • 前缀会自动拼接到所有子路由的 URI 前面(如 /api + /users/api/users
  • 闭包内调用的 getpost 等方法,等价于在全局 Router 上调用,只是 URI 自动加前缀
  • 示例:

use HyperfHttpServerRouterRouter;  Router::addGroup('/api', function () {     Router::get('/users', 'AppControllerUserController::index');     Router::post('/users', 'AppControllerUserController::store'); });

中间件与分组绑定

可在分组时指定中间件,该中间件将自动应用到组内所有路由:

  • 支持传入中间件类名数组,如 ['AuthMiddleware', 'CorsMiddleware']
  • 中间件执行顺序遵循数组顺序,且优先于控制器内定义的中间件
  • 子分组可叠加新中间件,形成“中间件继承链”

Router::addGroup('/admin', ['AppMiddlewareAuthMiddleware'], function () {     Router::get('/dashboard', 'AppControllerAdminDashboardController::index');      // 嵌套子分组,追加权限中间件     Router::addGroup('/users', ['AppMiddlewarePermissionMiddleware'], function () {         Router::get('/', 'AppControllerAdminUserController::index');         Router::post('/', 'AppControllerAdminUserController::create');     }); });

命名空间与控制器自动解析

分组本身不强制绑定命名空间,但常配合 addNamespace() 或手动拼接完整类名使用:

  • 推荐在分组闭包中统一使用完整控制器路径,避免歧义
  • 若项目采用标准命名规范,也可在分组外提前设置默认命名空间(需自行封装逻辑或借助注解路由增强)
  • 注意:Hyperf 默认路由不自动补全命名空间,'UserController::index' 会报错,必须写成 'AppControllerUserController::index'

嵌套分组与路径组合逻辑

Hyperf 允许无限层级嵌套分组,URI 是各层前缀按顺序拼接的结果:

  • 外层 /v1 + 内层 /order + 子路由 /list → 最终匹配 /v1/order/list
  • 嵌套时中间件是累加的,即外层中间件 + 内层中间件都会执行
  • 不建议过度嵌套(如超过 3 层),否则路由调试和维护成本上升

Router::addGroup('/v1', function () {     Router::addGroup('/goods', function () {         Router::get('/list', 'AppControllerGoodsController::list');         Router::get('/detail/{id}', 'AppControllerGoodsController::detail');     }); });

text=ZqhQzanResources