应根据需求选择:需严格限定仅路由变量且防干扰用闭包参数;需兼容多来源参数用request()->param()。前者只取路径值、类型为字符串;后者合并路由/get/post、支持修饰符转换。

路由变量可以直接通过 request()->param('name') 获取,也可以用闭包参数自动注入,两种方式本质不同,适用场景也不同,不能混用或随意替换。
request()->param() 能拿到所有来源的变量
这个方法会合并路由变量、GET 参数、POST 数据(POST 覆盖 GET),只要名字一致就统一读取。比如定义了路由 Route::get('user/:id', 'index/user/info');,访问 /user/123?id=456,request()->param('id') 返回的是 123(路由变量优先于 GET)。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 支持修饰符,例如
param('id/d')强制转整型,param('name/s')强制转字符串 - 能读到泛域名绑定的值,比如
*.admin.com绑定时传了name=*,可用param('name')拿到子域名部分 - 不区分请求方式,适合快速取值,但要注意覆盖逻辑——同名 POST 会把路由值“盖掉”
闭包参数是控制器方法的形参,只接收路由变量
当路由规则里写了 :id,控制器方法写成 public function info($id) { ... },框架会在调用前自动把匹配到的路由值赋给 $id。它和 param() 是两套机制,互不影响。
- 只来自路由路径,不会混入 GET 或 POST 的同名参数
- 类型是原始字符串,不做自动转换,需要手动校验或强转
- 如果路由没匹配上(比如正则不通过、缺少默认值),整个请求根本进不了这个方法,连报错都看不到,只能查日志或开调试模式
什么时候该用哪个?
想确保只拿路径里的 ID,且不被表单数据干扰,就用闭包参数;想兼容多种传参方式(比如接口既支持 /user/123 也支持 /user?id=123),就用 param()。
- 做 RESTful 接口或前后端分离项目,推荐闭包参数 + 显式验证,语义清晰、边界明确
- 做后台管理类页面,表单和 URL 参数经常混用,
param()更省事 - 验证路由参数时注意:验证器默认只检查
param()结果,闭包参数得先手动塞进数组再调validate()->check()
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










