Hyperf路由配置核心是URL到控制器方法的映射,支持配置文件和注解两种方式:配置文件集中管理适合中大型项目,注解方式代码即路由适合快速开发;均支持请求方法、路径参数、分组、中间件等特性。

Hyperf 路由配置核心就两点:把 URL 映射到控制器方法,并支持灵活的请求方式与结构组织。它不强制某种写法,而是提供配置文件和注解两种主流方式,按项目规模和团队习惯选即可。
配置文件方式:集中管理,适合中大型项目
所有路由统一写在 config/routes.php 中,用 Router 类静态方法定义:
-
Router::get('/users', 'App\Controller\UserController@index')—— 绑定 GET 请求 -
Router::post('/users', 'App\Controller\UserController@store')—— 绑定 POST 请求 -
Router::addRoute(['GET', 'POST'], '/login', 'App\Controller\AuthController::handle')—— 多方法共用一个处理逻辑 -
Router::get('/users/{id:\d+}', 'App\Controller\UserController@show')—— 带正则约束的动态参数,\d+表示只接受数字 ID -
Router::group(['prefix' => '/api/v1'], function () { ... })—— 路由分组,自动为内部路由加前缀,也支持统一加中间件
注解方式:代码即路由,适合快速开发或模块化设计
在控制器类或方法上直接加 PHP 注解,无需维护独立路由文件:
-
#[AutoController]—— 最简模式,自动为每个 public 方法生成GET/POST路由,路径按类名蛇形转换(如UserDetailController→/user_detail/{method}),可加prefix自定义前缀 -
#[Controller(prefix: '/admin')]配合#[GetMapping(path: 'users')]—— 精确控制每个方法的 HTTP 方法、路径、是否带参数等 - 支持细粒度注解:
#[PostMapping]、#[PutMapping]、#[DeleteMapping]、#[RequestMapping],路径支持变量和正则,例如path: 'user/{id:\d+}'
常见优化操作
提升可维护性和运行效率,有几个实用技巧:
- 路由参数尽量用正则约束(如
{id:\d+}),避免无效请求进入控制器,也减少手动校验 - 高频接口路径保持简洁,避免多层嵌套前缀;版本号建议放在路径开头(如
/v2/users),而非查询参数 - 权限相关路由统一用中间件包裹,配置文件中可通过
->addMiddleware(AuthMiddleware::class)单独添加,或在注解类上叠加#[Middleware(AuthMiddleware::class)] - 静态资源(如 favicon.ico)可用闭包快速响应,避免走完整 MVC 流程:
Router::get('/favicon.ico', fn() => '');
协议支持与路由无关,但影响实际使用
Hyperf 底层基于 Swoole,天然支持 HTTP/1.1、HTTP/2、WebSocket 和 gRPC。路由配置本身不区分协议,但不同协议对应不同服务类型:
- HTTP/1.1 和 HTTP/2 共享同一套路由规则,由
httpserver 处理 - WebSocket 请求需单独定义
wsserver,并用OnMessage等回调处理,不走常规 HTTP 路由 - gRPC 接口通过 Protocol Buffers 定义,路由由服务名+方法名决定,与
routes.php无直接关系











