hyperf路由组中间件配置核心是router::group()包裹路由并统一声明middleware数组,支持prefix、namespace及嵌套分组;中间件按权重值降序执行,需在middlewares.php中统一管理优先级,避免重复注册或上下文依赖错误。

Hyperf 路由组中间件配置的核心是:用 Router::group() 包裹一组路由,并通过 middleware 选项统一指定中间件数组。它不依赖全局配置,也不靠注解,而是直接在路由定义时声明,作用范围精准、逻辑清晰。
基础写法:给路由组加中间件
在 config/routes.php 中,使用 group() 方法传入配置数组,middleware 键填入中间件类名列表:
Router::group(['middleware' => [AuthMiddleware::class, LogMiddleware::class]], function () {-
Router::get('/dashboard', 'App\Controller\DashboardController@index'); -
Router::get('/profile', 'App\Controller\ProfileController@show'); });
这样,两个路由都会依次经过 AuthMiddleware(鉴权)和 LogMiddleware(日志),顺序按数组索引从前到后执行。
支持前缀、命名空间与嵌套分组
路由组可同时设置多个属性,提升组织效率:
- 添加公共路径前缀:
'prefix' => '/api/v1',所有子路由自动拼接 - 统一控制器命名空间:
'namespace' => 'App\Controller\Api\V1',避免重复写全路径 - 嵌套分组实现权限分层:外层加
AuthMiddleware,内层再加AdminRoleMiddleware
例如:Router::group(['prefix' => '/admin', 'middleware' => [AuthMiddleware::class]], function () { ... });
中间件权重影响实际执行顺序
如果组内中间件和全局/注解中间件共存,最终顺序由 权重值(priority)决定,不是声明顺序:
- 数值越大越先执行(如认证中间件设为
10) - 数值越小越后执行(如日志中间件设为
2) - 组内配置的中间件也会参与全局权重排序,不会“优先于”其他来源
建议在 config/autoload/middlewares.php 中统一管理权重,避免冲突。
常见避坑点
实际配置中容易忽略的关键细节:
- 中间件类必须已正确注册——检查是否在
middlewares.php的对应 server 类型(如'http')数组中 - 不要在 group 外重复注册同一中间件,否则可能触发两次鉴权或 session 异常
- 若中间件需协程上下文(如访问 Request 或 DB),确保它从容器获取依赖,而非
new实例 - 路由组不支持直接传参约束,参数校验需在控制器或中间件内手动处理











