注解路由生效需开启config/autoload/annotations.php中'scan'=>true并配置'paths'=>['app/Controller'],清空runtime/container与runtime/cache后重启服务;控制器类须加#[Controller]或#[AutoController],方法上用#[GetMapping]等绑定路径,最终路由可用php bin/hyperf.php route:list验证。

直接看官方配置和命令,比查文档更快上手。
核心配置文件在 config/autoload/annotations.php
这个文件控制注解是否被扫描,是注解路由生效的第一道开关:
- 确认 'scan' => true 已开启
-
'paths' 必须显式包含控制器目录,比如
['app/Controller'](不能写成app/Controller/**或漏掉) - 改完后必须清空
runtime/container和runtime/cache目录,再重启服务
控制器类要加 #[Controller] 或 #[AutoController]
光写方法上的 #[GetMapping] 没用,Hyperf 先得认出“这是个控制器”:
-
#[Controller(prefix: '/api')]:适合统一前缀、多接口共用中间件的场景 -
#[AutoController]:自动把 public 方法名转成路径(如getUserInfo()→/user/get_user_info),但只支持 GET/POST - 两个注解不能混用在同一类上,否则行为未定义
方法上用 #[GetMapping] 等注解绑定路径
注意写法和拼接规则,避免双斜杠或路径不匹配:
- 类上
#[Controller(prefix: '/api/v1')]+ 方法上#[GetMapping(path: 'users')]→ 实际路由是GET /api/v1/users - path 值不要以
/开头(写"users",别写"/users") - 路径参数带正则才真正校验,例如
#[GetMapping(path: '/user/{id:\d+}')],不写正则就全放行
验证是否成功,别猜,用命令
执行下面这句,输出的是最终注册进路由表的真实路径:
php bin/hyperf.php route:list
如果没看到你的路由,90% 是扫描没开、路径配错、类没加控制器注解,或者服务没重启。



















