hyperf路由分组必须用router::addgroup(),前缀须以/开头;闭包内子路由路径为相对路径,支持中间件、命名空间等配置,不可省略斜杠或重复前缀。

Hyperf 路由分组用 Router::addGroup() 方法定义,核心是前缀路径 + 闭包内注册子路由,不支持直接传字符串前缀(如 ThinkPHP 那样),必须以 / 开头,且闭包中写相对路径。
基础写法:用 addGroup 定义带前缀的路由组
use Hyperf\HttpServer\Router\Router;
Router::addGroup('/api', function () {
Router::get('/users', 'App\Controller\Api\UserController::index');
Router::post('/users', 'App\Controller\Api\UserController::store');
Router::get('/users/{id:\d+}', 'App\Controller\Api\UserController::show');
});
-
/api是组前缀,必须以/开头 - 闭包里的路径(如
/users)是相对于该前缀的,最终完整路径为/api/users - 子路由路径建议也以
/开头,避免歧义
支持中间件、命名空间等配置
addGroup 第一个参数可传数组,支持更精细控制:
Router::addGroup([
'prefix' => '/admin',
'middleware' => [App\Middleware\AuthMiddleware::class],
'namespace' => 'App\Controller\Admin',
], function () {
Router::get('/dashboard', 'DashboardController::index');
Router::get('/settings', 'SettingsController::index');
});
-
prefix:等效于字符串前缀,但更规范 -
middleware:整个分组统一挂载中间件 -
namespace:控制器类自动补全命名空间,写'DashboardController::index'即可,不用写全名
注意事项
- ❌ 不要写
Router::addGroup('admin', ...)—— 字符串形式不被识别,必须是/admin或数组 - ❌ 闭包内子路由不要重复加前缀,比如在
/api组里写Router::get('/api/users', ...)会导致实际路径变成/api/api/users - ✅ 路径参数支持正则约束,如
{id:\d+}表示只匹配数字,{token:[a-zA-Z0-9]+}也可用 - ✅ 可嵌套分组,但需注意路径拼接逻辑,建议扁平化管理
不复杂但容易忽略细节。











