`
lesorb
  • 浏览: 124745 次
  • 性别: 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
分享到:
评论

相关推荐

    validation-masterPHP数据验证库.zip

     public function validate(Validator $validator); }验证(Verification)是信息术语,编译过程的一部分,在该过程中,对代码进行检查,看是否与定义的特定规则集相一致,以允许检验某些安全要求。公共语言运行...

    CakePHP manual zh 中文手册

    数据验证 蛋糕PHP的模型层支持强大的数据验证规则,如`validateDefault`或`validateCustom`,确保输入数据的正确性。 ### 10. 插件与组件(Plugins & Components) 插件扩展了蛋糕PHP的功能,如用户认证、权限控制...

    CakePHP-1.2-Cheatsheet

    - **validate()**: 验证表单数据。 - **validateErrors()**: 获取验证错误。 #### 六、控制器(Controller)属性 控制器属性用于存储控制器的状态信息,包括: - **$name**: 控制器名称。 - **$action**: 当前动作...

    基于CakePHP实现的简单博客系统实例

    在这个模型中,我们设置了两个字段的验证规则:标题(title)和内容(body),要求两者在保存时都不能为空。 ```php class Post extends AppModel { public $validate = array( 'title' =&gt; array( 'rule' =&gt; '...

    CakePHP框架Model函数定义方法示例

    在CakePHP框架中,Model层是MVC(模型-视图-控制器)架构的重要组成部分,主要负责处理数据和业务逻辑。正确地定义Model函数对于保持代码的整洁和可维护性至关重要。以下是一些关于如何在CakePHP中定义Model函数的...

    cakephp常见知识点汇总

    - 表单验证和处理通常与模型的`validate`方法和控制器的动作关联。 以上是关于CakePHP的一些核心知识点,它们涵盖了模板渲染、数据库操作、组件和公共方法、Session管理和表单创建等多个方面。掌握这些知识点将有...

    php面试题及答案

    可以使用PHP的filter_var()函数配合FILTER_VALIDATE_EMAIL进行邮箱验证。 23. **日期差计算**: date_diff()函数可以计算两个日期之间的差距。 24. **获取网页内容**: 使用file_get_contents()或cURL库可以...

Global site tag (gtag.js) - Google Analytics