Yii Framework2.0开发教程(8)输入验证
validate() 方法,在幕后为执行验证操作。先看一个简单的例子,例子的代码在《Yii Framework2.0开发教程(2)使用表单Form》。
类ZhyoulunController中函数actionEntry() ,其中有一句$model->validate(),就是来判断输入的名字和电子邮件是否正确。
修改models/EntryForm.php
<?phpnamespace app\models;use yii\base\Model;class EntryForm extends Model
{public $name;public $email;public function rules(){return [['name', 'required','message'=>'名称不可缺省'],['email', 'required','message'=>'邮件不能缺省'],['email', 'email','message'=>'电子邮件格式不正确'],];}
}
可以看到如下表现
都不输入
邮件格式错误
输入都正确
很容易和我们修改后的代码对应。
validate() 方法,在幕后为执行验证操作,进行了以下步骤:
1、通过从 [[yii\base\Model::scenarios()]] 方法返回基于当前 [[yii\base\Model::scenario|场景(scenario)]] 的特性属性列表,算出哪些特性应该进行有效性验证。这些属性被称作active attributes(激活特性)。
2、通过从 [[yii\base\Model::rules()]] 方法返回基于当前 [[yii\base\Model::scenario|场景(scenario)]] 的验证规则列表,这些规则被称作active rules(激活规则)。
3、用每个激活规则去验证每个与之关联的激活特性。若失败,则记录下对应模型特性的错误信息。
rules()函数的语法
[// 必须项,用于指定那些模型特性需要通过此规则的验证。// 对于只有一个特性的情况,可以直接写特性名,而不必用数组包裹。['attribute1', 'attribute2', ...],// 必填项,用于指定【规则的类型】。// 它可以是类名,验证器昵称,或者是验证方法的名称。'validator',// 可选项,用于指定在场景(scenario)中,需要启用该规则// 若不提供,则代表该规则适用于所有场景// 若你需要提供除了某些特定场景以外的所有其他场景,你也可以配置 "except" 选项'on' => ['scenario1', 'scenario2', ...],// 可选项,用于指定对该验证器对象的其他配置选项'property1' => 'value1', 'property2' => 'value2', ...
]
你可以指定以下的规则类型之一:
核心验证器的昵称,比如 required、in、date,等等。请参考【核心验证器章节】查看完整的核心验证器列表。
模型类中的某个验证方法的名称,或者一个匿名方法。请参考【行内验证器小节】了解更多。
验证器类的名称。请参考【独立验证器小节】了解更多。
一个规则可用于验证一个或多个模型特性,且一个特性可以被一个或多个规则所验证。
核心验证器https://github.com/yiisoft/yii2/blob/master/docs/guide-zh-CN/tutorial-core-validators.md
default
['age', 'default', 'value' => null],// 若 "age" 为空,则将其设为 null['country', 'default', 'value' => 'USA'],// 若 "country" 为空,则将其设为 "USA"// 若 "from" 和 "to" 为空,则分别给他们分配自今天起,3 天后和 6 天后的日期。[['from', 'to'], 'default', 'value' => function ($model, $attribute) {return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' :'+6 days'));}],
trim
['name','trim'],//去掉输入信息的首尾空格
行内验证器
1、以匿名函数形式定义的行内验证器
['name', function($attribute, $params) {if (!ctype_alnum($this->$attribute)) {$this->addError($attribute, '令牌本身必须包含字母或数字。');}}],
2、以模型方法 validateCountry() 形式定义的行内验证器
<?phpnamespace app\models;use yii\base\Model;class EntryForm extends Model
{public $name;public $email;public function rules(){return [['name', 'required','message'=>'名称不可缺省'], ['email', 'required','message'=>'邮件不能缺省'],['email', 'email','message'=>'电子邮件格式不正确'],// ['name',
// function($attribute, $params)
// {
// if (!ctype_alnum($this->$attribute))
// {
// $this->addError($attribute, '令牌本身必须包含字母或数字。');
// }
// }
// ],['name', 'validateCountry'],];}public function validateCountry($attribute, $params){if (!in_array($this->$attribute, ['呵呵', '嘿嘿'])) {$this->addError($attribute, '必须为 "呵呵" 或 "嘿嘿" 中的一个。');}}
}
没有提到的还有客户端验证和独立验证器
https://github.com/yiisoft/yii2/blob/master/docs/guide-zh-CN/input-validation.md#%E7%8B%AC%E7%AB%8B%E9%AA%8C%E8%AF%81%E5%99%A8standalone-validators-
https://github.com/yiisoft/yii2/blob/master/docs/guide-zh-CN/input-validation.md#%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%AA%8C%E8%AF%81%E5%99%A8client-side-validation-
参考:https://github.com/yiisoft/yii2/blob/master/docs/guide-zh-CN/input-validation.md
转载请注明出处:http://blog.csdn.net/zhyoulun/article/details/40476805
Yii Framework2.0开发教程(8)输入验证相关推荐
- Yii Framework2.0开发教程(5)数据库mysql性能
继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给予一定的尊重yii2数据库支持引进 Yii 基于 PHP's PDO一个成熟的数据库访问层的建立.它提供了 ...
- 2.19 haas506 2.0开发教程 - bluetooth - 蓝牙通信(仅支持2.2以上版本)
haas506 2.0开发教程 - bluetooth - 蓝牙通信 蓝牙 案例说明 从机测试(支持601与320) 1. 蓝牙调试工具 2. 设备端开发 3. 功能测试 主机测试(仅支持320) 1 ...
- 2.23 haas506 2.0开发教程 - KeyPad - 矩阵键盘(仅支持M320开发板)
haas506 2.0开发教程 - KeyPad - 矩阵键盘 矩阵键盘 320矩阵键盘连线 案例说明 测试代码 功能测试 class - KeyPad keypad.init() - 初始化keyp ...
- 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)
haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由 阿里云M2M设备间通信 通信流程 功能实现 1.创建产品 2.设备端开发 联云测试 3.建立topic之间 ...
- MeeGo 开发指南 1.0 开发教程
MeeGo 开发指南 1.0 开发教程 转自: MeeGo中文 介绍 如果想获取MeeGo平台的开发概览,最好地方的是MeeGo developers.这里讨论的是一些更细节化的问题,比如MeeGo ...
- haas506 2.0开发教程 - 阿里云ota - pac 固件升级(仅支持2.2以上版本)
haas506 2.0开发教程-ota - pac 固件升级 ota - pac固件升级 案例说明 1.确定开发板内存 2.物联网平台开发 3.设备端开发 调试,确定开发板驻网成功 4.ota - 硬 ...
- 3.9 haas506 2.0开发教程-example-oled
haas506 2.0开发教程-example-oled 1.OLED模块 2.测试 3.效果 4.总结 1.OLED模块 有机发光二极管(OrganicLight-Emitting Diode,OL ...
- haas506 2.0开发教程-hota(仅支持2.2以上版本)
haas506 2.0开发教程-hota 1.hota.py升级 案例说明 (1)获取URL (2)功能代码 (3)输出log 2.hota.pac升级 案例说明 (1)获取URL (2)功能代码 ( ...
- 3.2 haas506 2.0开发教程-example-wifi定位
haas506 2.0开发教程-example-wifi定位 wifi定位 1.案例说明 2.程序代码 3.日志输出 总结 wifi定位 1.案例说明 扫描周围所得到的wifi热点,使用mac地址进行 ...
- 3.1 haas506 2.0开发教程-example-lbs (支持2.03以上版本)
haas506 2.0开发教程-example-lbs 1.LBS (围绕地理位置数据而展开的服务) 2.实现步骤 (1)注册账号 (2)创建新应用 (3)添加key (4)程序烧写 (5)日志输出 ...
最新文章
- Android 基础 一 AndroidManifest.xml
- 这个类库可以帮助你理解Java中的函数式编程
- 深度学习-Tensorflow2.2-模型保存与恢复{9}-保存与恢复-21
- 工业机器人九龙坡区职教中心_山西省襄汾县职教中心“智能工业机器人订单班”学生集体观看直播“2020一带一路暨金砖国家技能发展与技术创新大赛”...
- odd raio值 是什麼_乳化油相所需的HLB值
- vlan划分_什么样的网络需要划分VLAN?
- Theano 中文文档 0.9 - 1. 欢迎
- Dubbo自定义日志拦截器 1
- Windows VS2017 编译 libssh2 1.7.0(执行命令、文件上传、下载)
- fisco bcos transaction交易结构 源代码位置
- 到底应该使用count(*) 还是count(1)
- linux下下载文件到谷歌云盘,如何使用wget下载谷歌云端硬盘里的文件
- 大学计算机基础知识说课,计算机基础说课课件
- 一个基于jquery的周日历,简单易懂
- 微信支付商户号申请详细流程介绍
- MySQL学习笔记.数据的导入和导出
- 灵遁者诗歌集《笔有千钧》下集,魔幻与现实,都很美
- 华为手机怎么测试Android,华为手机怎么对硬件进行检测?华为手机硬件检测教程...
- 怎么做才能使校园网让多台电脑使用?
- Spring容器是怎么初始化的?
热门文章
- itellij jdk多重选择Class JavaLaunchHelper is implemented in both
- spark压缩和序列化相关
- hive 窗口函数 应用场景与实战详解
- shell 计算代码运行时间
- 在mysql中productname_ASP如何读出数据库里的英文符号.....%rs(ProductName)% 其是ProductName=10×26wood...
- zabbix3 mysql8.0_Zabbix3的离线安装
- 为什么打印出来的文件右边有阴影_怎样将十几几十页的长文件文档打印成A4纸对折的小册子?...
- excel 科学计数批量转换成文本
- 用AtomicStampedReference/AtomicMarkableReference解决ABA问题
- ExecutorService中submit和execute的区别