hyperf路由参数绑定分三类:路径参数(如/user/{id},用@pathvariable或类型提示)、查询参数(如?page=1,用@query)、请求体(json或表单,需@body显式声明);通过route:list验证是否生效。

Hyperf 路由参数绑定没有单独的“教程页面”,但核心用法就集中在三类场景里:路径参数({id})、查询参数(?page=1)和请求体(JSON/Form)。只要掌握这三块,95% 的参数绑定需求都能覆盖。
路径参数:用 @PathVariable 或类型提示
写在 URL 路径里的变量,比如 /user/{id} 或 /post/{slug:\w+}:
- 方法参数直接写
int $id或string $slug,Hyperf 会自动解析并类型转换 - 需要更灵活控制时,加
#[PathVariable("id")]注解(PHP 8 Attributes 写法) - 正则约束写在花括号里:
/user/{id:\d+}表示只匹配数字,不匹配/user/abc - 注意:路径参数必须出现在路由定义中,否则不会注入;
$request->path()拿不到它
查询参数:用 @Query 或 $request->query()
URL 中问号后的键值对,比如 /users?page=2&size=10:
- 推荐用
#[Query] int $page = 1,支持默认值、类型校验和必填标记 - 也可以直接调
$request->query('page', 1),但不带类型提示和自动验证 - 别把
@Query和@Param混用——前者只处理 ?xxx=yyy,后者只处理 /xxx/{yyy}
请求体参数:显式声明才解析
POST/PUT 请求的 JSON 或表单数据,默认不自动解析:
- JSON 请求体:加
#[Body]注解,参数类型建议用数组或 DTO 类 - 表单数据(x-www-form-urlencoded):同样用
#[Body],或手动调$request->post() - 不要依赖
$_POST—— Swoole 环境下它为空;必须走 Hyperf 的 Request 对象
验证是否生效?看 route:list
运行命令:
php bin/hyperf.php route:list如果看到你的路由路径后面标着 id、page 等参数名,说明绑定已识别。没出现?大概率是注解没扫描到、路径写错,或者控制器类缺 @Controller。










