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)输入验证相关推荐

  1. Yii Framework2.0开发教程(5)数据库mysql性能

    继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给予一定的尊重yii2数据库支持引进 Yii 基于 PHP's PDO一个成熟的数据库访问层的建立.它提供了 ...

  2. 2.19 haas506 2.0开发教程 - bluetooth - 蓝牙通信(仅支持2.2以上版本)

    haas506 2.0开发教程 - bluetooth - 蓝牙通信 蓝牙 案例说明 从机测试(支持601与320) 1. 蓝牙调试工具 2. 设备端开发 3. 功能测试 主机测试(仅支持320) 1 ...

  3. 2.23 haas506 2.0开发教程 - KeyPad - 矩阵键盘(仅支持M320开发板)

    haas506 2.0开发教程 - KeyPad - 矩阵键盘 矩阵键盘 320矩阵键盘连线 案例说明 测试代码 功能测试 class - KeyPad keypad.init() - 初始化keyp ...

  4. 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)

    haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由 阿里云M2M设备间通信 通信流程 功能实现 1.创建产品 2.设备端开发 联云测试 3.建立topic之间 ...

  5. MeeGo 开发指南 1.0 开发教程

    MeeGo 开发指南 1.0 开发教程 转自: MeeGo中文 介绍 如果想获取MeeGo平台的开发概览,最好地方的是MeeGo developers.这里讨论的是一些更细节化的问题,比如MeeGo ...

  6. haas506 2.0开发教程 - 阿里云ota - pac 固件升级(仅支持2.2以上版本)

    haas506 2.0开发教程-ota - pac 固件升级 ota - pac固件升级 案例说明 1.确定开发板内存 2.物联网平台开发 3.设备端开发 调试,确定开发板驻网成功 4.ota - 硬 ...

  7. 3.9 haas506 2.0开发教程-example-oled

    haas506 2.0开发教程-example-oled 1.OLED模块 2.测试 3.效果 4.总结 1.OLED模块 有机发光二极管(OrganicLight-Emitting Diode,OL ...

  8. haas506 2.0开发教程-hota(仅支持2.2以上版本)

    haas506 2.0开发教程-hota 1.hota.py升级 案例说明 (1)获取URL (2)功能代码 (3)输出log 2.hota.pac升级 案例说明 (1)获取URL (2)功能代码 ( ...

  9. 3.2 haas506 2.0开发教程-example-wifi定位

    haas506 2.0开发教程-example-wifi定位 wifi定位 1.案例说明 2.程序代码 3.日志输出 总结 wifi定位 1.案例说明 扫描周围所得到的wifi热点,使用mac地址进行 ...

  10. 3.1 haas506 2.0开发教程-example-lbs (支持2.03以上版本)

    haas506 2.0开发教程-example-lbs 1.LBS (围绕地理位置数据而展开的服务) 2.实现步骤 (1)注册账号 (2)创建新应用 (3)添加key (4)程序烧写 (5)日志输出 ...

最新文章

  1. Android 基础 一 AndroidManifest.xml
  2. 这个类库可以帮助你理解Java中的函数式编程
  3. 深度学习-Tensorflow2.2-模型保存与恢复{9}-保存与恢复-21
  4. 工业机器人九龙坡区职教中心_山西省襄汾县职教中心“智能工业机器人订单班”学生集体观看直播“2020一带一路暨金砖国家技能发展与技术创新大赛”...
  5. odd raio值 是什麼_乳化油相所需的HLB值
  6. vlan划分_什么样的网络需要划分VLAN?
  7. Theano 中文文档 0.9 - 1. 欢迎
  8. Dubbo自定义日志拦截器 1
  9. Windows VS2017 编译 libssh2 1.7.0(执行命令、文件上传、下载)
  10. fisco bcos transaction交易结构 源代码位置
  11. 到底应该使用count(*) 还是count(1)
  12. linux下下载文件到谷歌云盘,如何使用wget下载谷歌云端硬盘里的文件
  13. 大学计算机基础知识说课,计算机基础说课课件
  14. 一个基于jquery的周日历,简单易懂
  15. 微信支付商户号申请详细流程介绍
  16. MySQL学习笔记.数据的导入和导出
  17. 灵遁者诗歌集《笔有千钧》下集,魔幻与现实,都很美
  18. 华为手机怎么测试Android,华为手机怎么对硬件进行检测?华为手机硬件检测教程...
  19. 怎么做才能使校园网让多台电脑使用?
  20. Spring容器是怎么初始化的?

热门文章

  1. itellij jdk多重选择Class JavaLaunchHelper is implemented in both
  2. spark压缩和序列化相关
  3. hive 窗口函数 应用场景与实战详解
  4. shell 计算代码运行时间
  5. 在mysql中productname_ASP如何读出数据库里的英文符号.....%rs(ProductName)% 其是ProductName=10×26wood...
  6. zabbix3 mysql8.0_Zabbix3的离线安装
  7. 为什么打印出来的文件右边有阴影_怎样将十几几十页的长文件文档打印成A4纸对折的小册子?...
  8. excel 科学计数批量转换成文本
  9. 用AtomicStampedReference/AtomicMarkableReference解决ABA问题
  10. ExecutorService中submit和execute的区别