hyperf 3.1 路由路径参数自动注入需同时满足变量名严格一致和带正则约束(如 {id:\d+}),仅当控制器方法参数名与路由变量名完全相同且含正则时,才按类型提示自动转换并注入。

Hyperf 3.1 支持将路由中定义的路径参数(如 {id}、{name:\w+})自动绑定并注入到控制器方法的对应参数中,但需满足明确的命名与类型约束,否则注入失败或参数为空。
参数名必须严格一致
路由路径中的变量名,必须与控制器方法参数名完全相同,包括大小写和下划线。例如:
- 路由定义:
Router::get('/user/{uid:\d+}', 'App\Controller\UserController@show'); - 控制器方法签名必须为:
public function show(int $uid) { ... } - 若写成
$id或$UID,框架无法匹配,参数值为null或默认值
必须添加正则约束才启用自动注入
Hyperf 不会对无正则的裸参数(如 {id})做类型推导和安全校验,也不会触发参数自动注入。只有带正则的参数(如 {id:\d+}、{slug:[a-z0-9\-]+})才会被识别为可注入参数。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- ✅ 正确:
/post/{id:\d+}→ 方法接收int $id,自动转换并注入 - ❌ 无效:
/post/{id}→ 框架视为任意字符串,不转类型,也不注入到int $id,会报类型错误或传入空字符串 - ⚠️ 补充:即使声明
string $id,无正则时仍可能因 fast-route 内部机制导致匹配不稳定,官方强烈建议始终加正则
支持的参数类型与自动转换
Hyperf 根据正则表达式和方法参数类型提示,尝试自动转换参数值:
-
int $id+{id:\d+}→ 自动转为整型 -
string $name+{name:[a-z]+}→ 保持字符串 -
bool $active不推荐直接从路径注入,路径参数本质是字符串,应避免用 bool 类型接收 - 自定义对象不支持直接注入,需在方法内手动构造或通过服务解析
注解路由下的等效写法
使用 @GetMapping 等注解时,规则同样适用:
- 注解写法:
#[GetMapping("/user/{uid:\d+}")] - 方法签名:
public function show(int $uid) - 变量名
uid和正则中的uid必须一致,且不能省略:\d+ - 若使用
@Param注解显式提取,如#[Param("uid")] int $uid,可绕过路径正则依赖,但失去路由层校验,不推荐替代正则约束










