Yii2自定义参数验证处理post请求参数校验

阿强吖_6225

阿强吖_6225

2026-08-20

948人浏览

原创

yii2 不自动校验或转换 post 参数,必须显式校验:先用 $request->post('id', null) 取原始值,再用 filter_var 校验;模型中定义 rules() 进行结构化校验;json 请求需 getrawbody() 解析后校验,并携带 csrf token。

yii2自定义参数验证处理post请求参数校验

Yii2 不会自动校验 POST 请求参数,更不会自动转换类型或过滤内容。所有校验必须显式定义和触发,否则传入的字符串、空值、非法数字都会原样进入业务逻辑,极易引发安全或数据异常问题。

先取原始值,再做校验

别用 (int)$_POST['id']$request->post('id') 直接转类型——这会把 'abc' 变成 0,把空字符串变成 0,完全丢失语义。正确做法是:

  • $request->getBody()(JSON)或 $request->post()(表单)拿到原始数据数组
  • 对每个关键字段单独提取:比如 $id = $request->post('id', null)
  • 立即用 filter_var($id, FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]) 校验是否为合法正整数
  • 校验失败就抛出 BadRequestHttpException,不往下走

用模型规则做结构化校验

适合字段多、需统一处理、要返回标准错误格式的场景。在模型中定义 rules()

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • 基础类型校验:['age', 'integer', 'min' => 1, 'max' => 120]
  • 枚举值限制:['status', 'in', 'range' => ['draft', 'published']]
  • 存在性检查:['user_id', 'exist', 'targetClass' => User::class, 'targetAttribute' => 'id']
  • 空值控制:加 'skipOnEmpty' => false 确保即使字段为空也执行该条规则

控制器里调用 $model->load(Yii::$app->request->post(), '')(注意第二个参数为空字符串,避免默认前缀),再 $model->validate() 即可。

复杂逻辑用自定义验证器

当内置规则不够用,比如要校验手机号格式+运营商+归属地,或校验两个字段是否一致,就得自己写:

  • 内联验证器:适合简单逻辑,直接写在 rules() 里,用匿名函数,签名必须是 function ($model, $attribute, $params),失败时调 $model->addError($attribute, $msg)
  • 独立验证类:新建 PhoneValidator extends Validator,重写 validateAttribute(),类名必须以 Validator 结尾,参数通过 public 属性声明(如 public $strict = true),并在 rules 中传入

特别注意 JSON POST 请求

前端发 Content-Type: application/json 时,$_POST 是空的,$request->post() 也拿不到数据。必须:

  • 先用 $rawBody = $request->getRawBody() 获取原始 JSON 字符串
  • $data = json_decode($rawBody, true) 解析成数组
  • 然后对 $data 手动校验或赋值给模型($model->load($data, '')
  • 别忘了 CSRF:JSON 请求需在 headers 中带上 X-CSRF-Token,服务端默认仍会校验

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

2025.11.26

504

16

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

1935

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

2542

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

896

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

2839

7

软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

2023.10.13

3890

8

ThinkPHP表单验证与数据安全处理实战
ThinkPHP表单验证与数据安全处理实战

本专题聚焦 ThinkPHP 在表单处理中的验证与安全机制,系统讲解验证器使用、自定义规则、场景验证以及错误提示处理。内容涵盖 XSS 防护、SQL 注入防御、数据过滤与输入校验等关键安全措施。通过实际案例,帮助开发者构建安全可靠的数据处理流程。

2026.03.30

161

20

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

2730

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii2中文手册
Yii2中文手册

共0课时 | 0.6万人学习

thinkphp基础介绍和yii2基础介绍
thinkphp基础介绍和yii2基础介绍

共10课时 | 2.5万人学习

Yii2框架基础视频教程
Yii2框架基础视频教程

共22课时 | 2.8万人学习