hyperf 路由分组通过 router::addgroup() 统一管理前缀、中间件和公共配置,支持基础分组、嵌套分组及参数传递,提升 api 结构清晰度与可维护性。

Hyperf 路由分组通过 Router::addGroup() 统一管理前缀、中间件和公共配置,让 API 结构更清晰、维护更方便。
基础分组写法:带前缀和中间件
最常用场景是为一组接口统一添加版本前缀(如 /v1)和鉴权中间件:
use Hyperf\HttpServer\Router\Router;
Router::addGroup('/v1', function () {
Router::get('/users', 'App\Controller\UserController::index');
Router::post('/users', 'App\Controller\UserController::store');
}, ['middleware' => [AuthMiddleware::class]]);
这样所有子路由自动继承 /v1 前缀,并在执行前经过 AuthMiddleware 检查。
嵌套分组:多层路径与权限隔离
适合模块化设计,比如后台管理接口可再按资源细分:
Router::addGroup('/admin', function () {
Router::addGroup('/users', function () {
Router::get('/', 'App\Controller\Admin\UserController::list');
Router::delete('/{id}', 'App\Controller\Admin\UserController::delete');
}, ['middleware' => [AdminPermissionMiddleware::class]]);
Router::addGroup('/orders', function () {
Router::get('/', 'App\Controller\Admin\OrderController::list');
}, ['middleware' => [AdminPermissionMiddleware::class]]);
}, ['middleware' => [LoginMiddleware::class]]);
- 外层
/admin分组应用登录中间件 - 内层
/users和/orders各自加权限控制,互不影响 - 最终路由为
/admin/users、/admin/orders等
分组参数与变量传递
分组本身不支持直接定义参数,但子路由可正常使用占位符,且分组前缀会拼接:
Router::addGroup('/api', function () {
Router::get('/posts/{id:\d+}', 'App\Controller\PostController::show');
Router::put('/posts/{id:\d+}', 'App\Controller\PostController::update');
});
匹配路径为 /api/posts/123,其中 {id:\d+} 保证只接受数字 ID,提升安全性。
注意事项与常见问题
- 分组闭包内必须调用子路由方法(
get、post等),不能只写控制器类名 - 中间件数组在分组中定义后,会叠加到每个子路由,不会覆盖子路由单独设置的中间件
- 路由文件需在
config/autoload/routes.php中被自动加载,或在Bootstrap中手动引入 - 调试时可用
php bin/hyperf.php route:list查看所有注册路由及中间件顺序











