直接用request()->get()和request()->post()即可,无需引入request类;param()更通用但会合并get/post同名参数,json请求必须用param()而非post()。

直接用 request()->get() 和 request()->post() 就行
ThinkPHP5 不需要手动引入 Request 类或写 use think\Request —— request() 是全局助手函数,开箱即用。它返回当前请求的 Request 实例,所有参数获取、类型判断、过滤都基于这个对象。
常见错误是写成 $this->request->get()(TP5.0 早期风格),但 5.1+ 已不推荐这种写法;更糟的是直接读 $_GET 或 $_POST,这会跳过框架的自动过滤和安全机制。
-
request()->get()返回全部 GET 参数数组(已过滤) -
request()->post()返回全部 POST 参数数组(仅支持application/x-www-form-urlencoded和multipart/form-data) - 如果只取单个字段,比如
id,写成request()->get('id')或request()->post('username') - 带默认值和过滤:
request()->get('name', '匿名', 'htmlspecialchars,trim')
param() 是更通用的选择,但要注意混合来源
当接口既可能被表单提交,也可能被 JSON 请求调用时,request()->param() 比 post() 更可靠——它会自动识别并解析 application/json、路由变量、GET 和 POST 数据。
但这也带来一个隐藏问题:GET 和 POST 同名参数会被合并,且 POST 优先。比如 URL 带 ?status=1,同时 POST 体含 {"status":2},param('status') 返回的是 2,不是 1。
- 需要严格区分来源?用
only(['field'], 'get')或only(['field'], 'post') - 接收 JSON 提交却用
post()→ 返回空数组,这是最常被卡住的地方 -
param(false)获取原始未过滤数据;param(true)包含上传文件信息
判断请求类型别靠 $_SERVER['REQUEST_METHOD']
框架提供了语义清晰的方法:request()->isGet()、request()->isPost()、request()->isAjax()、request()->isMobile()。这些不是简单比对字符串,而是结合了 header、content-type、X-Requested-With 等多维度判断。
例如 isAjax() 会检查 X-Requested-With: XMLHttpRequest,而不仅是看 method 是不是 POST;isMobile() 则基于 user-agent 特征串匹配,比自己写正则靠谱得多。
- 不要用
$_SERVER['REQUEST_METHOD'] === 'POST',它无法识别 PUT/PATCH 模拟、CSRF 中间件拦截后的行为 -
isPut()、isDelete()在 RESTful 场景下很实用 - 注意:
isPost()对 JSON 请求返回false,因为 method 是 POST,但 content-type 不匹配
字段类型声明能防很多低级错误
ThinkPHP5 的 post() 和 param() 支持在字段名后加类型标识,比如 'age/d' 表示转整型、'tags/a' 强制为数组、'content/s' 自动 trim + htmlspecialchars。这比在控制器里一堆 intval() 和 htmlspecialchars() 更简洁也更统一。
没加类型标识的写法(如 post('price'))等价于裸读 $_POST['price'],框架不会做任何转换或校验,极易引发类型错误或 XSS。
-
post('score/d', 0):非数字时返回默认值0,不是null或空字符串 -
post(['name'=>'s','price'=>'f','enabled'=>'b']):批量接收,每个字段独立处理类型 - 前端传
{"enabled":"off"},post('enabled/b')会转成false,而不是字符串"off"
真正容易被忽略的是:JSON 请求必须用 param(),且字段类型声明依然生效;而 post() 对 JSON 完全无感——这不是 bug,是设计使然。别在调试时反复确认 header 和 body 是否正确,先换方法试试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











