hyperf 注解路由通过 @getmapping 等 php doc 注解自动注册 http 路由,需启用 scan 配置、安装必要组件、在 controller 类或方法上添加注解,并注意类命名、路径匹配、方法可见性等细节。

Hyperf 的注解路由是通过 PHP Doc 注解(如 @GetMapping、@PostMapping)自动注册 HTTP 路由的方式,无需手动在配置文件中定义,提升开发效率和代码可读性。
启用注解扫描功能
Hyperf 默认不开启注解路由扫描,需在 config/autoload/server.php 中确保 scan 配置已启用,并包含控制器目录:
- 确认
'scan' => ['paths' => ['app/Controller']]已配置 - 确保
hyperf/http-server和hyperf/routing已安装 - 若使用自定义命名空间(如
App\Controller),需同步更新scan.paths和自动加载映射
在控制器中使用路由注解
在控制器类或方法上添加标准 HTTP 方法注解,Hyperf 会自动解析并注册对应路由:
- 类顶部加
@Controller(prefix="/api")可统一设置前缀 - 方法上用
@GetMapping("/users")、@PostMapping("/users")等声明具体路径与方法 - 支持路径参数:
@GetMapping("/users/{id}"),参数名需与方法形参一致(如public function view(int $id)) - 支持查询参数自动绑定:
public function search(string $name, int $page = 1)会自动从 query string 获取
常见问题与注意事项
注解路由看似简单,但几个细节容易出错:
- 控制器类必须放在已配置的
scan.paths目录下,且类名以Controller结尾(如UserController) - 注解中的路径不区分末尾斜杠,
/users和/users/视为相同路由 - 若多个注解匹配同一路径+方法(如两个
@PostMapping("/login")),启动时会报重复路由错误 - 注解只对 public 方法生效;private/protected 方法即使有注解也不会注册
调试与验证路由
运行服务后可通过命令快速查看当前已注册的路由列表:
- 执行
php bin/hyperf.php route:list查看所有有效路由 - 检查输出中是否包含你的注解路由,注意 Method、URI、Handler 是否正确
- 若未出现,优先检查控制器文件是否被扫描(可临时加
var_dump('scanned');在构造函数中验证) - 修改注解后需重启服务(或开启
watcher模式)才能生效











