讲师中心 微信公众号
AI工具推荐 视频效率加速

Yii2模型验证如何自定义验证器类

酷磊同学_5212

酷磊同学_5212

发布时间:2026-09-13 12:36:46

|

592人浏览过

|

来源于php中文网

原创

必须将复杂校验逻辑抽离为独立验证类,如PhoneValidator需继承yii\validators\Validator、重写validateAttribute()、调用parent::init()、正确使用addError,并支持clientValidateAttribute()及rules中完整命名空间配置。

yii2模型验证如何自定义验证器类

创建独立验证类文件

当校验逻辑涉及正则匹配、数据库查询、多字段协同或需被多个模型复用时,必须抽离为独立验证类。在common/validators目录下新建PhoneValidator.php文件(路径可按项目规范调整,但类名必须以Validator结尾)。

类必须继承yii\validators\Validator,且validateAttribute()方法是唯一被框架调用的入口——写validate()无效。

这一步漏掉parent::init()会导致$this->message等属性未初始化,后续报错信息为空或报PHP Notice。

编写核心验证逻辑

在PhoneValidator类中重写validateAttribute()方法:

先判断值是否为空,若需跳过空值则手动检查:if (empty($model->$attribute)) return; 否则直接执行校验;再用preg_match()匹配11位手机号格式,失败时调用$this->addError($model, $attribute, $this->message)。

【注意:addError第一个参数必须是$model对象,不是字符串】

若需支持客户端验证,必须同时实现clientValidateAttribute()并返回合法JS字符串,否则表单失去焦点时不触发校验。

声明并使用验证规则

在模型的rules()方法中添加规则:

Yii Framework 2.0.51
Yii Framework 2.0.51

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

下载

[['mobile'], 'common\validators\PhoneValidator']

如需传参,先在验证类中声明public属性:public $strict = true;,再在rules中传入:[['mobile'], 'common\validators\PhoneValidator', 'strict' => false]。

验证类路径必须完整,不能省略命名空间;若类名不以Validator结尾,Yii自动加载将失败,validate()静默跳过该条规则。

配置when与skipOnEmpty行为

第一步:明确触发条件。使用when控制整条规则是否执行,例如仅当用户类型为'member'时才校验手机号:'when' => fn($m) => $m->userType === 'member'。

第二步:处理空值逻辑。若when返回true,再由skipOnEmpty决定是否跳过空值校验,默认为true;设为false可强制对空值也执行校验。

【when返回false时,skipOnEmpty完全不生效】

第三步:组合使用。常见安全组合是'when' => fn($m) => $m->status === 1, 'skipOnEmpty' => false,确保状态为1时无论字段是否为空都校验。

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

6975

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

362

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

364

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

243

2026.04.17

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

355

2025.11.27

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

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

3110

2025.09.04

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

20

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

0

2026.10.28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn