`
lesorb
  • 浏览: 123158 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CakePHP之数据验证(validate)设置

阅读更多
在CakePHP中,对于模型数据的验证是非常简单的,下面就是我在Blog Model中用到的验证方法:

/**
 * Blog validate rule
 *
 * @var array
 * @access public
 */
	var $validate = array(
		'title'=>array(
			'notEmpty' => array(
				'rule' => VALID_NOT_EMPTY,
				'message' =>'The title is not empty'
				),
			'notBlank' => array(
				'rule' => '/[^\\s]/',
				'message' => 'Please input the title!'
				)
			),
		'description'=>array(
			'notEmpty' => array(
				'rule' => VALID_NOT_EMPTY,
				'message' =>'The blog\'s content is not empty'
				),
			'notBlank' => array(
				'rule' => '/[^\\s]/',
				'message' => 'Please input the content!'
				)
			)
	);

当然,这是必须的.虽然,客户端验证看起来更加友好,但为了最大限度的防止数据有效性,server的数据验证显的尤为重要!

下面我将全面的绍介下,CakePHP中对于数据验证的规则设定和内置函数以及处理方法:

验证规则
1. Simple Rules (普通的)

var $varlidate = array('fieldName' => 'ruleName');


2. One Rule Per Field (单的)

var $varlidate = array(
	'fieldName1' => array(
		'rule' => 'ruleName', //or: array('ruleName', 'param1', 'param2' ...)
		'required' => true,
		'allowEmpty' => false,
		'on' => 'create', //or: 'update'
		'message' => 'Error Message'	
	)
);


3. Multiple Rules per Field (多个)

var $validate = array(
	'fieldName' => array(
		'ruleName' => array(
			'rule' => 'ruleName',
		),
		'ruleName2' => array(
			'rule' => 'ruleName2',
		)
	)
);


CakePHP在frame内部内置了很多(详见cake/libs/validation.php中)非常常见的函数来实现了数据验证:

一、内置验证规则

1. alphaNumeric
只包含字母和数字:

var $validate = array(
     'login' => array(
         'rule' => 'alphaNumeric',
         'message' => 'Usernames must only contain letters and numbers.'
     )
);


2. between
数据长度必须属于一个指定范围,必须提供最小值和最大值:

var $validate = array(
     'password' => array(
         'rule' => array('between', 5, 15),
         'message' => 'Passwords must be between 5 and 15 characters long.'
     ) 
);


3. blank
字符是否为空,或仅包含空白字符,例如space,tab :

var $validate = array(
     'id' => array(
         'rule' => 'blank',
         'on' => 'create'
     ) 
);


4. cc
验证信用卡号码是否有效。它需要3个参数:'type', 'deep' and 'regex':

var $validate = array(
     'ccnumber' => array(
         'rule' => array('cc', array('visa', 'maestro'), false, null),
         'message' => 'The credit card number you supplied was invalid.'
     ) 
);
 

5. comparison
用来比较数值:

var $validate = array(
     'age' => array(
         'rule' => array('comparison', '>=', 18),
         'message' => 'Must be at least 18 years old to qualify.'
     ) 
); 
var $validate = array(
     'age' => array(
         'rule' => array('comparison', 'greater or equal', 18),
         'message' => 'Must be at least 18 years old to qualify.'
     ) 
); 


6. date
确保数据提交有效的日期格式:

var $validate = array(
     'born' => array(
         'rule' => 'date',
         'message' => 'Enter a valid date in YY-MM-DD format.',
         'allowEmpty' => true
     ) 
); 


7. decimal
用来检查提交的数据是否是一个有效的十进制整数:

var $validate = array(
     'price' => array(
         'rule' => array('decimal', 2)
     ) 
); 


8. email
用来检查输入是否是一个有效的 email 地址(非常常用):

var $validate = array('email' => array('rule' => 'email'));  
var $validate = array(
     'email' => array(
         'rule' => array('email', true),
         'message' => 'Please supply a valid email address.'
     ) 
);


9. equalTo
将确保该值等于,和同类型的特定价值:

var $validate = array(
     'food' => array(
         'rule' => array('equalTo', 'cake'),
          'message' => 'This value must be the string cake'
     ) 
); 


10. extension
检查文件的扩展名是否为指定格式,一般用array来限定扩展名:

var $validate = array(
     'image' => array(
         'rule' => array('extension', array('gif', 'jpeg', 'png', 'jpg'),
         'message' => 'Please supply a valid image.'
     ) 
); 


11. ip
确保提交的是有效的IPv4地址:
var $validate = array(
     'clientip' => array(
         'rule' => 'ip',
         'message' => 'Please supply a valid IP address.'
     ) 
); 


12. isUnique
确保该字段是唯一的:

var $validate = array(
     'name' => array(
         'rule' => 'isUnique',
         'message' => 'This name has already been taken.'
     ) 
); 


13. minLength

确保数据符合最小长度要求:

var $validate = array(
     'password' => array(
         'rule' => array('minLength', '8'),
          'message' => 'Password must be at least 8 characters long.'
     ) 
); 


14. maxLength
确保数据符合最大长度要求:
var $validate = array(
     'name' => array(
         'rule' => array('maxLength', '15'),
          'message' => 'Names must be no larger than 15 characters long.'
     ) 
);


15. money
确保该值是一个有效的货币:第二个参数定义符号位于(left/right):
var $validate = array(
     'salary' => array(
         'rule' => array('money', 'left'),
         'message' => 'Please supply a valid monetary amount.'
     ) 
); 


16. inList
这条规则将确保该值属于某一(通常是array)集合:
var $validate = array(
       'function' => array(
           'allowedChoice' => array(
               'rule' => array('inList', array('Foo', 'Bar')),
               'message' => 'Enter either Foo or Bar.'
           )
       )
     ); 


17. numeric
是否是一个有效的号码(数字):
var $validate = array(
     'carNum' => array(
         'rule' => 'numeric',
          'message' => 'Please supply the number of cars.'
     )
); 


18. notEmpty
确保字段不为空(常用):
var $validate = array(
     'title' => array(
         'rule' => 'notEmpty',
         'message' => 'This field cannot be left blank'
     ) 
);


19. phone
验证一个合法的电话号码,缺省为'all'.
如果你想验证某个国家的电话号码,你可以提供一个表达的第二个参数,用以支持其它格式:
var $validate = array(
     'phone' => array(
         'rule' => array('phone', null, 'us')
     ) 
);


20. postal
用来验证邮政编码,缺省为'null'.
可以是美国(us),加拿大(ca) ,英国(uk),德国( de )和比利时(be).
对于其他邮递区号格式,您可以提供一个正则表达式作为第二个参数;
var $validate = array(
     'zipcode' => array(
         'rule' => array('postal', null, 'us')
     ) 
); 


21. range
保证值是在特定的范围内:
var $validate = array(
     'number' => array(
         'rule' => array('range', 0, 10),
         'message' => 'Please enter a number between 0 and 10'
     ) 
); 


22. ssn
ssn(美国)有效的社会安全号码,可以是美国(us),丹麦(dk),荷兰(nl) .

23. url
检查有效的URL格式。
支持HTTP(s)的FTP(s),file,news和的Gopher协议:

var $validate = array(
     'urls' => array(
         'rule' => 'url'
     ) 
); 


二、Custom Validation Rules (自定义验证)

1. Custom Regular Expression Validation (自定义正则表达式验证)
var $validate = array(
     'username' => array(
         'rule' => array('custom', '/[a-z0-9]{4,}$/i'),
          'message' => 'Only letters and integers, min 4 characters'
     ) 
); 

以上,检查的username只包含字母和整数,并且不少于四个字符.

2. Custom Validataion Methods (自定义方法验证)
<?php
 class User extends AppModel {
     var $name = 'User';
       var $validate = array(
         'code' => array(
             'rule' => array('limitDuplicates', 25),
             'message' => 'This code has been used too many times.'
         )
     );
     function limitDuplicates($data, $limit){
         $existing_count = $this->find( 'count', array('conditions' => $data, 'recursive' => -1) );
         return $existing_count < $limit;
     }
 } 
?> 

这个自定义方法避免了code在数据库中出现的次数不超过一定的次数(25).

以上就是CakePHP中关于server端数据验证的方法汇总,如有缈误,欢迎指出,欢迎留言评论!
1
0
分享到:
评论

相关推荐

    CakePHP创建验证器

    在Web应用开发中,数据验证是非常重要的环节之一,它能够确保用户提交的数据符合预期的格式和规则,从而提高应用程序的安全性和用户体验。CakePHP是一款非常流行的PHP框架,它内置了一套强大的验证系统,可以帮助...

    cakephp-1.2 manual

    9. **验证(Validation)**:手册会介绍如何在模型中设置数据验证规则,确保用户输入的数据符合要求。 10. **调试与性能优化**:学习如何使用 CakePHP 的调试模式进行问题排查,以及如何进行性能优化,如使用缓存和...

    CakePHP框架指南

    5. 数据验证和过滤:CakePHP提供了强大的数据验证工具,确保输入数据的有效性,同时还有过滤功能用于清理数据。 6. 插件系统:CakePHP框架支持插件,这是一种可以添加额外功能的代码包。用户可以通过安装插件来扩展...

    CakePHP PHP MVC框架

    2. **自动验证**:对表单数据进行验证,确保输入符合预设规则。 3. **ORM(对象关系映射)**:通过ActiveRecord模式,提供了一种简单的数据库操作方式,无需编写SQL语句。 4. **CRUD操作**:内置创建(Create)、读取...

    cakephp-1.3.21.zip

    1. 数据验证:提供内置的验证规则,可轻松确保输入数据的有效性,减少程序错误。 2. 蛋糕式路由:自动映射URL到控制器方法,简化URL管理和路由配置。 3. 自动化 CRUD:支持快速创建、读取、更新和删除数据,降低...

    CakePHP 1.2 API 中文文档

    在模型层,CakePHP 提供了强大的表单验证机制。开发者可以在模型中定义验证规则,确保输入数据的完整性和准确性。 **哈希与安全** CakePHP 1.2 包含了加密和哈希类,用于处理密码存储和敏感数据的安全性。例如,`...

    PHP的框架之CakePHP-CakePHP教程

    打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...

    CakePHP 3.4 开发手册文档 CakePHP Cookbook Documentation Release 3.4

    3. **模型**:控制器可能会调用模型来进行数据操作,例如查询数据库、验证数据等。 4. **视图**:最后,控制器将处理好的数据传递给视图层进行渲染,然后返回给客户端。 #### 入门指南 **快速启动指南**提供了对 ...

    CakePHP使用ajax传值

    2. 在Controller中设置数据处理:在CakePHP中,所有来自AJAX请求的数据将会被封装在$_POST或$_GET数组中。如果数据为中文并且在控制器中获取时出现了乱码,需要使用iconv函数进行转码。例如,如果请求中的数据编码为...

    cakephp 框架1.3.11版本

    5. **验证**:CakePHP内置了强大的验证机制,可以方便地对用户输入进行检查,确保数据的安全性和完整性。 6. **烤箱**(Bake):这是CakePHP自带的一个工具,可以自动生成模型、控制器、视图等基础代码,加快开发...

    cakephp 框架书籍 英文版

    - **配置**:讲解了如何配置CakePHP的各种设置,以适应不同的开发场景。 - **路由**:介绍了CakePHP的路由机制,以及如何自定义URL结构。 - **会话**:解释了会话管理的相关概念,以及CakePHP如何处理会话数据。 - *...

    phpmvc框架cakephp

    2. **验证**:框架内置的数据验证机制帮助确保输入数据的正确性和安全性。 3. **烤饼规则(Baking)**:CakePHP的Bake工具可以自动生成控制器、模型、视图等文件,加速开发进程。 4. **安全**:CakePHP包含CSRF...

    CakePHP v2.3.0.zip

    站长百科下载说明.txt**:可能是关于如何从某个网站或资源库下载CakePHP v2.3.0的指南,可能涉及到注意事项、验证下载的完整性以及安装后的初步设置。 **8. 礼品,1G美国主机兑换说明.txt**:这可能与推广活动有关...

    PHP的框架之CakePHP-CakePHP教程终极教程

    打包下载,里面有CakePHP的框架源码,下载后可直接使用,版本是1.1的,稳定版;CakePHP的分页组件源码;CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP...

    cakephp-cakephp-2.0.0-beta-0-g402934f.zip

    9. **自动验证(Validation)**:提供了数据验证规则,确保输入数据的正确性和安全性。 10. **错误处理和日志记录**:优雅地处理异常,记录系统事件,便于调试和问题定位。 通过使用CakePHP,开发者可以快速构建...

    cakephp-jwt-auth, 使用JSON网络令牌进行身份验证的CakePHP插件.zip

    cakephp-jwt-auth, 使用JSON网络令牌进行身份验证的CakePHP插件 CakePHP认证插件 包含AuthComponent类认证的插件,用于使用 JSON网络令牌进行身份验证。 你可以在这里详细阅读关于JSON网络令牌规范的详细说明。要求...

    cakePHP完整实例

    - **数据验证**:在模型中定义数据验证规则,例如确保添加的新事项必须包含标题。 - **用户体验优化**:对模型中的时间字段进行格式化处理,提高用户界面的友好性;为应用创建主页,让用户能够方便地访问各个功能...

    cakephp 框架

    1. Model:模型层是数据处理的核心,负责与数据库交互,处理业务逻辑和数据验证。开发者可以创建数据模型来代表数据库中的表,通过ORM(对象关系映射)实现数据库操作。 2. View:视图层负责展示用户界面,通常包含...

    cakephp帮助文档

    - **数据验证**:在模型层对输入数据进行验证,确保数据的完整性和正确性。 #### 四、核心组件 - **模型**:深入理解模型的功能,如关联关系、行为(Behavior)、事件等。 - **视图**:掌握视图模板语法、布局...

Global site tag (gtag.js) - Google Analytics