ThinkPHP5.1获取请求参数应按来源和场景选方法:param()自动合并GET/POST(POST覆盖GET),支持修饰符和路由变量;get()/post()严格隔离,仅读$_GET/$_POST;put()/delete()专用于RESTful请求;另有only()/except()/has()/route()/file()等辅助方法。

ThinkPHP5.1获取请求参数主要靠 Request 类提供的多个方法,核心区别在于数据来源和适用场景。别盲目用 param() 图省事,选错方法容易拿不到值、覆盖参数或绕过安全过滤。
param():自动合并但有覆盖规则
它按 GET → POST 顺序读取并合并参数,同名时 POST 覆盖 GET。比如 URL 带 ?id=1,同时 POST 提交 id=2,$request->param('id') 返回的是 2。
- 适合快速开发、不关心参数来源的简单接口
- 不解析 PUT/DELETE 请求体,也不处理
application/json内容,需改用input('json')或rawInput() - 能获取路由变量(如
/user/:id中的id),但get()和post()拿不到 - 支持变量修饰符,例如
param('id/d')强制转整型,param('name/s')强制转字符串
get() 和 post():严格按 HTTP 方法取值
get() 只读 $_GET,post() 只读 $_POST,两者完全隔离,不会互相影响。
- 表单
method="get"就必须用get();method="post"才能用post() - 发送
application/json请求时,$_POST为空,post()必然返回空 —— 此时不能硬扛,得换input('json') - 适合需要审计参数来源、做幂等校验、或依赖 URL 参数做权限判断的场景
- 都支持默认值和过滤,例如
get('page', 1, 'intval')
put()、delete() 等:专用于 RESTful 请求
ThinkPHP5.1 提供了对应方法,直接读取解析后的 PUT 或 DELETE 数据(前提是请求头 Content-Type 正确且服务器未拦截)。
立即学习“PHP免费学习笔记(深入)”;
-
put('name')获取 PUT 请求中键为name的字段 -
delete('id')同理,适用于 DELETE 请求携带 body 的情况 - 若前端发的是 JSON,仍需确保设置了
Content-Type: application/json,否则框架无法自动解析 - 未设置时可配合
input('json')或rawInput()手动处理原始请求体
其它实用方法
除基础方法外,还有几个高频辅助手段:
-
only(['id', 'name']):白名单方式提取指定参数,支持指定来源,如only(['id'], 'post') -
except(['token']):黑名单方式排除敏感字段,也支持限定请求类型 -
has('email', 'post'):判断某参数是否存在,避免空值误判 -
route('id'):明确从路由中取值,比param()更精准,尤其在 PATHINFO 或闭包路由中 -
file('avatar'):专门处理上传文件,返回think\File对象



















