CakePHP 2.x CookBook 中文版模型之数据校验
数据校验对于任何应用程序,数据校验都是重要部分,因为它有且于确保模型中的数据遵守了应用程序的业务规则。 例如,你可能想要确保密码最少要有8位,或者确保用户名唯一。 定义校验规则使表单处理非常非常简单。校验过程有许多不同的面。本节覆盖的是其中模型这一面。 即:在调用模型中的 save() 方法时发生了什么。 关于如何处理校验错误的显示的更多信息,参见: 表单助手。数据校验的第一步是在模型中建立校验规则。这是用模型定义中的 Model::validate 数组实现的:1 class User extends AppModel {2 public $validate = array();3 }在上面的示例中,$validate 数组被添加到 User 模型中,但数组不包含校验规则。 假设 users 表有 login、password、email 和 born 列,下面的示例展示了应用在这些列上的一些简单的校验规则:1 class User extends AppModel {2 public $validate = array(3 'login' => 'alphaNumeric',4 'email' => 'email',5 'born' => 'date'6 );7 }上例展示了如何向模型列添加校验规则。对于 login 列,只接受字母和数字,email 必须是有效的邮件地址,born 必须是有效的日期。 如果提交的数据违反了定义的规则,这些校验规则定义能使 CakePHP 自动在表单中显示错误信息。CakePHP 有许多校验规则,且易于使用。 一些内置的规则允许你校验 email、URL 和 信用卡数字的格式 - 我们稍后会讲到它们的细节。下面是一个非常复杂的校验的示例,利用了一些内置的校验规则:1 class User extends AppModel {2 public $validate = array(3 'login' => array(4 'alphaNumeric' => array(5 'rule' => 'alphaNumeric',6 'required' => true,7 'message' => 'Alphabets and numbers only'8 ),9 'between' => array(10 'rule' => array('between', 5, 15),11 'message' => 'Between 5 to 15 characters'12 )13 ),14 'password' => array(15 'rule' => array('minLength', '8'),16 'message' => 'Minimum 8 characters long'17 ),18 'email' => 'email',19 'born' => array(20 'rule' => 'date',21 'message' => 'Enter a valid date',22 'allowEmpty' => true23 )24 );25 }其中两条是为 login 定义的:它只能包含字母和数字,并且长度必须在5至15之间。 password 列必须不少于8位长。 email 必须是有效的邮件地址,并且 born 必须是有效的日期。 还要注意的是,怎样定义校验失败时显示特定的错误信息。上面的例子中,单个列可以使用多个校验规则。如果内置的规则不能满足你的要求,你可以添加自己需要的校验规则。现在你已经看到了数据校验的全景,让我们瞧瞧如何在模型中定义这些规则。有三种不同的方法:简单数组、每个列的单个规则、每个列的多个规则。简单规则顾名思义,这是定义校验规则最简单的方法。 这种方法定义规则是标准语法是:1 public $validate = array('fieldName' => 'ruleName');‘fieldName’ 是规则所适用的列的名字,‘ruleName’是预定义的规则名,例如 ‘alphaNumeric’、’email’ 或者 ‘isUnique’。例如,要确保用户所提供的是格式正确的邮件地址,可以使用如下规则:1 public $validate = array('user_email' => 'email');每个列一个规则这种定义手法对校验规则的工作有更好的控制。在我们讨论这个之前,先来看看向单个列添加一条规则的标准用法:1 public $validate = array(2 'fieldName1' => array(3 'rule' => 'ruleName', // or: array('ruleName', 'param1', 'param2' ...)4 'required' => true,5 'allowEmpty' => false,6 'on' => 'create', // or: 'update'7 'message' => 'Your Error Message'8 )9 );‘rule’ 键是必须的。如果仅设置了 ‘required’ => true,表单验证将无易做图确工作。因为 ‘required’ 不是实际的规则。正如你看到的,每个列(上面只演示了一个列)与包含了如下五个键的数组关联:‘rule’、 ‘required’、 ‘allowEmpty’、 ‘on’ 和 ‘message’。让我们仔细地观察这几个键。rule‘rule’ 方法定义了校验方面并且指定了一个值或者一个数组。这个特定的 ‘rule’ 可能是模型中的一个方法的名字,核心 Validation 类的一个方法的名字,或者正则表达式。要了解关于默认规则的更多信息,请参见 内核核验规则。如果 rule 不包含任何参数,’rule’ 可以是单个值,例如:1 public $validate = array(2 'login' => array(3 'rule' => 'alphaNumeric'4 )5 );如果 rule 包含参数(例如 max,min 或者范围),’rule’ 将是一个数组:1 public $validate = array(2 'password' => array(3 'rule' => array('minLength', 8)4 )5 );记住,用数组方式定义规则时,’rule’ 键是必须的。required这个键接受一个逻辑值、create 或者 update。将其设置为 true 将使这一列总是被必须的。设置为 create 或者update 将使这一列只在更新或创建操作时必须。如果 ‘required’ 等于 true,数组中必须提供此列。例如,如果定义如下校验规则:1 public $validate = array(2 'login' => array(3 'rule' => 'alphaNumeric',4 'required' => true5 )6 );传递给模型的 save() 方法的数据必须包含提供给 login 列的数据。如果它不存在,那么校验失败。这个键的默认补充:Web开发 , php ,
上一个:php的引用返回和取消引用
下一个:php字符串中的双引号与单引号区别
- 更多php疑问解答:
- php使用imagick将image图片转化为字符串模式
- php通过gd实现图片图片转换为字符图代码
- PHP把图片转base64代码,php把base64代码转换为图片并保存
- PHP把图片base64转换成图片并保存成文件
- wordpress问题<?php if(have_posts()) : ?>
- 建设一个搜索类网站php还是jsp,数据库那个好
- 没理由啊 php代码无法执行,貌似有语法错误。。。
- 关于PHP 和API 的一段代码不懂啊不懂,请高手指点! 这是淘宝API的
- php语言中,序列化到底在那里使用?它的优势是什么?劣势是什么?
- PHP函数等于或等于应该怎么表达
- 请教php高手,解决basename函数和mb_substr函数处理中文文件名称的解决方法,在上传文件时,总是出现乱码
- .NET,PHP,JAVA,JS优秀点分别是?
- 织梦cms 在环境监测的时候 wamp5 gd不支持 是为什么。;extension=php_gd2.dll这一句我删除了还是不显示?
- 我想学PHP。1.应安装什么编程工具? 2. 装LIUNX系统是装简易的还是?什么版本的?3.还应安装什么?
- <?php 和 <? 有什么区别