当前位置:编程学习 > php >>

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' => true
23         )
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' => true
5     )
6 );
传递给模型的 save() 方法的数据必须包含提供给 login 列的数据。如果它不存在,那么校验失败。这个键的默认
补充:Web开发 , php ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,