YII 验证规则和消息提示

jerry Yii 2016年07月19日 收藏

setFlash(), getFlash()可以完成验证成功后提示

  1. <?php  
  2. # 成功信息提示  
  3. Yii::app()->user->setFlash('success', "Thinks saved success!");  
  4. # 错误信息提示  
  5. Yii::app()->user->setFlash('error', "here has an Error, Please check that!");  
  6. # 一般消息信息提示  
  7. Yii::app()->user->setFlash('notice', "messge here");  
  8. ?>

2.errorSummary验证不通过的错误提示
rules()方法中定义的规则会在模型实例调用其 validate() 或 save() 方法时逐一执行。normalizeTags验证器是一个基于方法的验证器,Models/xx.php中的rules()的验证规则是对数据库表进行的,Models/xxForm.php中的rules()的验证规则是对表单进行的,和数据库表没有关系,类名和文件名要相同 。
如果我们使用一个validator(验证器)类,则这个类必须继承CValidator。其实有三种方法可以指定validator(验证器),包括前面提到的一种格式:
1.第一种是在模型类中定义验证方法
2.第二种是指定一个单独的验证器类(这个类继承validators/CValidator )。
3.第三种是你可以使用Yii框架中现有的验证器,指定预定义的验证器别名即可。
Yii为你提供了很多预定义的验证器类,同时也指定了别名,用在定义规则时。Yii1.1版本,预定义的验证器别名的完整列表如下:

  1. * captcha:它是CCaptchaValidator类的别名,验证属性的值等于一个显示的CAPTCHA(验证码)的值。
  2. * compare:它是CCompareValidator类的别名'=','==','!=','>','>='
  3. * default:它是CDefaultValidator类的别名,验证属性的值为分配的默认值。
  4. * exist:它是CExistValidator类的别名,验证属性的值在表中的对应列中存在。 
  5. * filter:它是CFilterValidator类的别名,用过滤器转换属性的值。
  6. * in:它是CRangeValidator类的别名,验证属性值在一个预定义列表中。
  7. * length:它是CStringValidator类的别名,验证属性值的长度在一个范围内。
  8. * match:它是CRegularExpressionValidator类的别名,验证属性值匹配一个正则表达式。
  9. * numerical:它是CNumberValidator类的别名,验证属性值是数字。
  10. * type:它是CTypedValidator类的别名,验证属性值是一个指定的数据类型。
  11. * unique:它是CUniquedValidator类的别名,验证属性值在表中的对应列中是唯一的。
  12. * url:它是CUrlValidator类的别名,验证属性值是一个有效的URL

2.单独的验证器类 方便重用
首先要做的是创建类文件.最好的方法时类的文件名和类名相同,可以使用yii的延迟加载(lazy loading)功能。
让我们在应用(application)的扩展(extensiions)目录(在 protected 文件夹下)下新建一个文件夹.
将目录命名为: MyValidators然后创建文件: passwordStrength.php

  1. class passwordStrength extends CValidator{  
  2.     public $strength;  
  3.   
  4.     private $weak_pattern = '/^(?=.*[a-zA-Z0-9]).{5,}$/';  
  5.     private $strong_pattern = '/^(?=.*\d(?=.*\d))(?=.*[a-zA-Z](?=.*[a-zA-Z])).{5,}$/';  
  6.     protected function validateAttribute($object,$attribute)  
  7.     {  
  8.         // check the strength parameter used in the validation rule of our model  
  9.         if ($this->strength == 'weak')  
  10.         $pattern = $this->weak_pattern;  
  11.         elseif ($this->strength == 'strong')  
  12.         $pattern = $this->strong_pattern;  
  13.   
  14.         // extract the attribute value from it's model object  
  15.         $value=$object->$attribute;  
  16.         if(!preg_match($pattern, $value))  
  17.         {  
  18.             $this->addError($object,$attribute,'your password is too weak!');  
  19.         }  
  20.     }

 然后在模型(model)的:

  1. /** 
  2.  * @return array validation rules for model attributes. 
  3.  */  
  4. public function rules()  
  5. {  
  6.     return array(  
  7.        array('password', 'ext.MyValidators.passwordStrength', 'strength'=>self::STRONG),  
  8.     );  
  9. }

由于我们直接在User AR类中添加了$repassword属性,并且它与底层数据库表之间没有对应关系,我们需要告诉模型类允许这个属性在setAttributes()被调用时被设置。 保存时不能入库需要添加rules验证验证器 。我们的做法是将其添加到User模型类的安全属性列表中。向User::rules()数组添加下列代码:

  1. array('repassword', 'safe'),

我们新建的$repassword不存在对应的tbl_user表中的列,需要将其直接添加到安全属性列表。
setAttributes:

  1. $model->attributes=$_POST['User'];

添加了$repassword属性

  1. class User extends CActiveRecord  
  2. {  
  3.     public $repassword; //不能是private会报错  以注册验证为例.controller
  4. public function actionRegister()    
  5. {    
  6.     $model=new User;          
  7.     if(isset($_POST['User']))  
  8.     {         
  9.         $model->attributes=$_POST['User'];  
  10.         if($model->save()){    
  11.             Yii::app()->user->setFlash('register','Thank you for your register.');//验证通过提示    
  12.             $this->refresh();   
  13.         }    
  14.     }    
  15.     
  16.     $this->render('register',array(    
  17.         'model'=>$model,    
  18.     ));    
  19. }

register.php

  1. <h1>注册用户</h1>  
  2. <?php if(Yii::app()->user->hasFlash('register')): ?>  
  3.   
  4. <div class="flash-success">  
  5.     <?php echo Yii::app()->user->getFlash('register'); ?>  
  6. </div>  
  7.   
  8. <?php else: ?>  
  9.   
  10. <div class="form">  
  11. <?php $form=$this->beginWidget('CActiveForm', array(  
  12.     'id'=>'user-form',  
  13.     'enableAjaxValidation'=>false,  
  14. ));   
  15. ?>  
  16.     <p class="note">Fields with <span class="required">*</span> are required.</p>  
  17.   
  18.     <?php echo $form->errorSummary($model); ?>  
  19.   
  20.     <div class="row">  
  21.         <?php echo $form->labelEx($model,'password'); ?>  
  22.         <?php echo $form->passwordField($model,'password',array('size'=>60,'maxlength'=>128, 'autocomplete'=>'off','value'=>'')); ?>  
  23.         <?php echo $form->error($model,'password'); ?>  
  24.        <?php //echo $model->getError('password'); ?>  
  25.     </div>  
  26.   
  27.     <div class="row">  
  28.         <?php echo $form->labelEx($model,'repassword'); ?>  
  29.         <?php echo $form->passwordField($model,'repassword',array('size'=>60,'maxlength'=>128, 'autocomplete'=>'off','value'=>'')); ?>  
  30.         <?php echo $form->error($model,'repassword'); ?>  
  31.     </div>  
  32.   
  33.     <div class="row buttons">  
  34.         <?php echo CHtml::submitButton('注册'); ?>  
  35.     </div>  
  36.   
  37. <?php $this->endWidget(); ?>  
  38. </div>  
  39.   
  40. <?php endif; ?>

ajax动态验证
第一步:在_form中最上面改成

  1. $form=$this->beginWidget('CActiveForm', array(  
  2.     'id'=>'user-form',  
  3.     'enableAjaxValidation'=>true,  
  4. )

第二步:controller中添加,对应 'id'=>'user-form'

  1. $this->performAjaxValidation($model);  
  2.   
  3. protected function performAjaxValidation($model)  
  4. {  
  5.     if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')  
  6.     {  
  7.         echo CActiveForm::validate($model);  
  8.         Yii::app()->end();  
  9.     }  
  10. }

第三步:在models层中加入checkemai方法

  1. public function rules()  
  2. {  
  3.     // NOTE: 可以用exist验证器替换  
  4.     return array(  
  5.         array('email', 'checkUser','message'=>'Test message for email validation'),  
  6.         array('user_id', 'checkUser','message'=>'Test message for {attribute} validation'),  
  7.     );  
  8. }  
  9. public function checkUser($attribute,$params) //attribute用法  
  10. {  
  11.     switch($attribute){  
  12.         case "email": //rules email  
  13.             $models = ServiceReviews::model()->findAllByAttributes(array('email' =>$this->email,'service_id'=>$this->service_id));  
  14.             if(count($models)>0){  
  15.                  $this->addError($attribute, $params['message']);  
  16.             }  
  17.         break;  
  18.         case "user_id":  
  19.             if(Yii::app()->user->isGuest){  
  20.                 $models = ServiceReviews::model()->findAllByAttributes(array('user_id' =>Yii::app()->user->id,'service_id'=>$this->service_id));  
  21.                 if(count($models)>0){  
  22.                      $this->addError($attribute, $params['message']);  
  23.                 }  
  24.             }  
  25.         break;  
  26.     }  
  27. }

最后在models层的验证规则中(rules)加入以下验证规则{attribute}

  1. array('email', 'checkUser','message'=>'已经存在{attribute}'),

刚才创建的方法需要两个参数:
* $attribute 需要验证的属性
* $params 在规则中自定义的参数
在模型的 rules 方法中我们验证的是email属性,所以在验证规则中需要验证的属性值应该是 email.
在 rules 方法中我们还设置了自定义的参数 message,它的值将会放到 $params 数组中.
三.非表单验证错误处理 :
你会发现在方法中我们使用了 CModel::addError().添加错误接受两个参数:第一个参数是在表单中显示错误的属性名,第二个参数时显示的错误信息 。
用户提交表单时,可能除表单验证之外还有与表单各输入项无关的其他错误产生,例如后台数据库出错、接口调用失败等。
这种情况下可以在Model中相应的位置使用如下代码记录错误:

  1. $this->addError('info', '发送不明错误,请重试'); // info 只是一个自定义的名字,不需要真正有这个字段或属性。

然后在视图文件中这样输出错误:

  1. echo $form->error($model, 'info'); //$form 是 CActiveForm 的实例。$form->getErrors();

当我们调用 CModel::validate() 方法, 我们可以指定一个场景参数. 只有在特定的场景下校验规则才会生效.校验规则会在那些 on 选项没有被设置或者包含了指定的场景名称的场景中生效.如果我们没有指定场景,而调用了 CModel::validate() 方法,只有那些 on 选项没有设置的规则才会被执行 .

  1. $model = new model('register');  
  2. // or $model=new User;  
  3. // $model->scenario='register';

例如,在注册一个用户时,我们运行以下脚本来执行校验 :

  1. array('password', 'compare', 'compareAttribute'=>'repassword', 'on'=>'register,edit'),   
  2.   Email验证器
  3. array('email','email'), //验证email这个字段必须符合email格式  
  4.  Compare验证器 
  5. array('password2','compare','compareAttribute'=>'password1'),//验证password1和password2必须一致  
  6. array('end_date','compare', 'compareAttribute' => 'start_date', 'operator' => '>', 'message' => '错误的开始结束日期'),  
  7. Unique验证器
  8. array('username,email','unique','className'=>'User'),//User为Model,username,email在user中不允许重复  
  9. 如果被验证属性为空,就认为完全合法,立刻返回,但是如果allowEmptyfalse的话,就要通过函数后续的所有验证条件 。那么对于一个传入的空值来说,allowEmpty无论是true还是false,极有可能都不会报错,上面节选的验证器是StringValidator,如果我没有设定min的值,那么一个空串在allowEmptyfalse的情况下,还是不会报任何错误的。
  10. 如果希望一个属性值不能为空,最好还是用RequiredValidator来验证,allowEmpty是不靠谱的,建议一般就采取allowEmpty的默认值true,可以节省几次判断。
  11. array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),  
  12. 布尔验证器
  13. array('rememberMe', 'boolean'),  
  14. 数字验证器
  15. array('id', 'numerical', 'min'=>1, 'max'=>10, 'integerOnly'=>true),  
  16. default验证器 datetime格式
  17. array('created','default','value'=>new CDbExpression('NOW()'),'setOnEmpty'=>false)  
  18. fiter验证器
  19. array('moduleID', 'filter', 'filter'=>'trim'),  
  20. 正则验证器
  21. array('name','match','pattern'=>'/^[a-z0-9\-_]+$/'),  
  22. in验证器
  23. array('superuser', 'in', 'range' => array(0, 1)),  
  24. length验证器
  25. array('password','length','min'=>'6','max'=>'16','message'=>'{attribute}长度必须在{min}到{max}之间'),   
  26. 类型验证 integer,float,string,array,date,time,datetime
  27. array('created', 'type', 'datetime'),  
  28. 日期格式验证
  29. array('created', 'date', 'format'=>'yyyy/MM/dd/ HH:mm:ss'),  
  30. 文件验证
  31. array('filename', 'file', 'allowEmpty'=>true, 'types'=>'zip, rar, xls, pdf, ppt'),
  1. array(
  2.  array(‘username’, required’),
  3.  array(‘username’, length’, min’=>3, max’=>12),
  4.  array(‘password’, compare’, compareAttribute’=>’password2′, on’=>’register’),
  5.  array(‘password’, authenticate’, on’=>’login’),
  6.   array(‘Price’,’numerical’, integerOnly’=>true),
  7. );
  8. public function rules()
  9. {
  10.   return array(
  11.       array(‘title, content, status’, required’),
  12.       array(‘title’, length’, max’=>128),
  13.       array(‘status’, in’, range’=>array(1,2,3)),
  14.       array(‘tags’, match’, pattern’=>’/^[\w\s,]+$/’,
  15.           message’=>’Tags can only contain word characters.’),
  16.       array(‘tags’, normalizeTags’),
  17.       array(‘title, status’, safe’, on’=>’search’),
  18.   );
  19. }

经常用到的属性有 attributes,builtInvalidators,message,on这四个
下面是对应的验证类

  1. required: CRequiredValidator
  2. filter: CFilterValidator
  3. match: CRegularExpressionValidator
  4. email: CEmailValidator
  5. url: CUrlValidator
  6. unique: CUniqueValidator
  7. compare: CCompareValidator
  8. length: CStringValidator
  9. in: CRangeValidator
  10. numerical: CNumberValidator
  11. captcha: CCaptchaValidator
  12. type: CTypeValidator
  13. file: CFileValidator
  14. default: CDefaultValueValidator
  15. exist: CExistValidator
  16. boolean: CBooleanValidator
  17. date: CDateValidator
  18. safe: CSafeValidator
  19. unsafe: CUnsafeValidator
  1. 1CRequiredValidator  必须值验证属性
  2. requiredValue-mixed-所需的值
  3. strict-boolean-是否比较严格
  4. 实例: array(‘username’, required’), 不能为空
  5. array(‘username’, required’, requiredValue’=>’lh’,’message’=> usernmae must be lh’), 这个值必须为lh,如果填其他值还是会验证不过
  6. array(‘username’, required’, requiredValue’=>’lh’, strict’=>true), 严格验证 还可以在后面加 message’=>”,’on’=>这些
  7. 2CFilterValidator 过滤验证属性
  8. filter  方法名 (调用用户自己定义的函数)
  9. 实例:
  10. array(‘username’, test’) function test() { $username = $this->username; if($username != lh’){ $this->addError(‘username’, username must be lh’); } }
  11. 使用这个方法如果你还在array里面写message=>”,给出的提示信息还是你的test里面的。也就是以test里面的错误信息为准
  12. 3CRegularExpressionValidator -
  13. 正则验证属性allowEmpty  是否为空(默认true)
  14. not-是否反转的验证逻辑(默认false) pattern  正则表达式匹配实例:
  15. // 匹配a-z array(‘username’, ‘match’, ‘allowEmpty’=>true, ‘pattern’=>’/[a-z]/i’,’message’=>’必须为字母’),
  16. // 匹配不是a-z array(‘username’, ‘match’, ‘allowEmpty’=>true, ‘not’=>true, ‘pattern’=>’/[a-z]/i’,’message’=>’必须不是字母’),
  17. 4CEmailValidator –邮箱验证属性:
  18. allowEmpty  是否为空
  19. allowName  是否允许在电子邮件地址的名称
  20. checkMx  是否检查电子邮件地址的MX记录
  21. checkPort  是否要检查端口25的电子邮件地址
  22. fullPattern  正则表达式,用来验证电子邮件地址与名称的一部分
  23. pattern  正则表达式,
  24. 用来验证的属性值实例: array(‘username’, email’, message’=>’必须为电子邮箱’, pattern’=>’/[a-z]/i’),
  25. 5CUrlValidator  url验证属性:
  26. allowEmpty  是否为空
  27. defaultScheme  默认的URI方案
  28. pattern  正则表达式
  29. validSchemes  清单应视为有效的URI计划。
  30. 实例:
  31. array(‘username’, url’, message’=>’must url’),
  32. array(‘username’, url’, defaultScheme’=>’http://www.baidu.com’),
  33. 6CUniqueValidator  唯一性验证属性:
  34. allowEmpty  是否为空
  35. attributeName  属性名称
  36. caseSensitive  区分大小写
  37. className  类名
  38. criteria  额外的查询条件
  39. 实例:
  40. array(‘username’, unique’, message’=>’该记录存在’),
  41. array(‘username’, unique’, caseSensitive’=>false, message’=>’该记录存在’),
  42. 7CCompareValidator  比较验证属性:
  43. allowEmpty  是否为空
  44. compareAttribute  需要比较的属性
  45. compareValue -比较的值
  46. operator  比较运算符
  47. strict  严格验证(值和类型都要相等)
  48. 实例: // 与某个值比较 array(‘username’, ‘compare’, ‘compareValue’=>’10′, ‘operator’=>’>’, ‘message’=>’必须大于10′),
  49. // 与某个提交的属性比较 array(‘username’, ‘compare’, ‘compareAttribute’=>’password’, ‘operator’=>’>’, ‘message’=>’必须大于password’),
  50. 8CStringValidator  字符串验证属性:
  51. allowEmpty  是否为空
  52. encoding  编码
  53. is  确切的长度
  54. max  最大长度
  55. min  最小长度
  56. tooLong  定义值太大的错误
  57. tooShort  定义最小长度的错误
  58. 实例: array(‘username’, length’, max’=>10, min’=>5, tooLong’=>’太长了’, tooShort’=>’太短了’),
  59. array(‘username’, length’, is’=>5, message’=>’长度必须为5′),
  60. 9CRangeValidator  在某个范围内属性:
  61. allowEmpty  是否为空
  62. not  是否反转的验证逻辑。
  63. range  array范围
  64. strict  严格验证(类型和值都要一样)
  65. 实例: array(‘username’, in’, range’=>array(1,2,3,4,5), message’=>’must in 1 2 3 4 5′),
  66. array(‘username’, in’, not’=>true, range’=>array(1,2,3,4,5), message’=>’must not in 1 2 3 4 5′),
  67. 10CNumberValidator  数字验证属性:
  68. allowEmpty  是否为空
  69. integerOnly  整数
  70. integerPattern  正则表达式匹配整数
  71. max  最大值
  72. min  最小值
  73. numberPattern  匹配号码
  74. tooBig  值太大时的错误提示
  75. tooSmall  值太小时的错误提示
  76. 实例: array(‘username’, numerical’, integerOnly’=>true, message’=>’must be int’),
  77. array(‘username’, numerical’, integerOnly’=>true, message’=>’must be int’, max’=>100, min’=>10, tooBig’=>’is too big’, tooSmall’=>’is too small’),
  78. 11CCaptchaValidator  验证码验证属性:
  79. allowEmpty  是否为空
  80. caseSensitive  区分大小写
  81. 12CTypeValidator  类型验证属性:
  82. allowEmpty  是否为空
  83. dateFormat  日期应遵循的格式模式(‘MM/dd/yyyy’)
  84. datetimeFormat  日期时间应遵循的格式模式(‘MM/dd/yyyy hh:mm’)
  85. timeFormat  时间应遵循的格式模式(‘hh:mm’)
  86. type  类型 string’, integer’, float’, array’, date’, time and datetime
  87. 实例: array(‘username’, type’, dateFormat’=>’MM/dd/yyyy’, type’=>’date’),
  88. 13CFileValidator  文件验证属性:
  89. allowEmpty  是否为空
  90. maxFiles  最大文件数
  91. maxSize  文件的最大值
  92. minSize  最小值
  93. tooLarge  太大时的错误信息
  94. tooMany  太多时的错误信息
  95. tooSmall  太小时的错误信息
  96. types  允许的文件扩展名
  97. wrongType  扩展名错误时给出的错误信息
  98. 14CDefaultValueValidator  默认值属性:
  99. setOnEmpty  设置为空
  100. value  默认值
  101. 实例: array(‘username’, default’, setOnEmpty’=>true, value’=>’lh’),
  102. 15CExistValidator  是否存在属性:
  103. allowEmpty = 是否为空
  104. attributeName  属性名称
  105. className  类名
  106. criteria  标准
  107. 16CBooleanValidator  布尔类型验证属性:
  108. allowEmpty  是否为空
  109. falseValue  错误状态的值
  110. strict  严格验证
  111. trueValue  真实状态的值
  112. 实例: array(‘username’, boolean’, trueValue’=>1, falseValue’=>-1, message’=>’the value must be 1 or -1′),
  113. 17CDateValidator  日期验证属性:
  114. allowEmpty  是否为空
  115. format  日期值应遵循的格式模式
  116. timestampAttribute  接收解析结果的属性名称
  117. 实例: array(‘username’, date’, format’=>’MM-dd-yyyy’,’message’=>’must be MM-dd-yyyy’),
  1. <?php
  2. class ContactForm extends CFormModel
  3. {
  4.     public $_id;
  5.     public $contact;//联系人
  6.     public $tel;//电话
  7.     public $fax;//传真
  8.     public $zipcode;//邮编
  9.     public $addr;//地址
  10.     public $mobile;//手机
  11.     public $email;//邮箱
  12.     public $website;//网址
  13.     public $qq;//QQ
  14.     public $msn;//MSN
  15.     public function rules()
  16.     {
  17.         return array(
  18.             array('contact','required','on'=>'edit','message'=>'联系人必须填写.'),
  19.             array('contact','length','on'=>'edit','min'=>2,'max'=>10,'tooShort'=>'联系人长度请控制在2-10个字符.','tooLong'=>'联系人长度请控制在2-10个字符.'),
  20.              
  21.             array('tel', 'match','pattern' => '/^(\d{3}-|\d{4}-)(\d{8}|\d{7})?$/','message' => '请输入正确的电话号码.'),
  22.             array('fax', 'match','pattern' => '/^(\d{3}-|\d{4}-)(\d{8}|\d{7})?$/','message' => '请输入正确的传真号码.'),
  23.             array('mobile', 'match','pattern' => '/^13[0-9]{1}[0-9]{8}$|15[0189]{1}[0-9]{8}$|189[0-9]{8}$/','message' => '请输入正确的手机号码.'),
  24.  
  25.             array('email','email','on'=>'edit','message'=>'邮箱输入有误.'),
  26.              
  27.             array('zipcode','required','on'=>'edit','message'=>'邮编必须填写.'),
  28.             array('zipcode','numerical','on'=>'edit','message'=>'邮编是6位数字.'),
  29.             array('zipcode','length','on'=>'edit','min'=>6,'max'=>6,'tooShort'=>'邮编长度为6位数.','tooLong'=>'邮编长度为6位数.'),
  30.              
  31.             array('website','url','on'=>'edit','message'=>'网址输入有误.'),
  32.             array('qq', 'match','pattern' => '/^[1-9]{1}[0-9]{4,11}$/','message' => '请输入正确的QQ号码.'),
  33.             array('msn','email','on'=>'edit','message'=>'MSN输入有误.'),
  34.         );
  35.     }
  36.  
  37. }
  1. public function rules()
  2. {
  3.     return array(
  4.         array('project_id, type_id, status_id, owner_id, requester_id,', 'numerical', 'integerOnly'=>true),
  5.         array('name', 'length', 'max'=>256),
  6.         array('description', 'length', 'max'=>2000),
  7.         array('create_time,create_user_id,update_user_id, update_time', 'safe'),
  8.         array('id, name, description, project_id, type_id, status_id, owner_id', 'on'=>'search'),
  9.     );
  10. }
  11.  
  12. //required: 必填
  13. array('title,content','required'),
  14.  
  15. //match: 正则表达式验证
  16. array('birthday', 'match', 'pattern'=>'%^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$%', 'allowEmpty'=>true, 'message'=>'生日必须是年-月-日格式'),
  17.  
  18. //email:邮箱格式验证
  19. array('user_mail', 'email'), 
  20.  
  21. //url:URL格式验证
  22. array('user', 'url'), 
  23.  
  24. //unique:唯一性验证
  25. array('username', 'unique','caseSensitive'=>false,'className'=>'user','message'=>'用户名"{value}"已经被注册,请更换'),
  26. //caseSensitive 定义大小写是否敏感
  27.  
  28. //compare:一致性验证
  29. array('repassword', 'compare', 'compareAttribute'=>'password','message'=>'两处输入的密码并不一致'),
  30.  
  31. //length:长度验证 
  32.  
  33. //in: 验证此属性值在列表之中(通过range指定)。
  34.  
  35. //numerical: 验证此属性的值是一个数字
  36.  
  37. //captcha: 验证属性值和验证码中显示的一致
  38. array('verifyCode','captcha'),
  39.  
  40. //type: 验证属性的类型是否为type所指定的类型. 
  41.  
  42.  
  43. //file: 验证一个属性是否接收到一个有效的上传文件
  44.  
  45.  
  46. //default: 属性指定默认值
  47.  
  48.  
  49. //exist: 验证属性值在数据库中是否存在
  50.  
  51.  
  52. //boolean: 验证布尔属性值
  53.  
  54.  
  55. //date: 检验此属性是否描述了一个日期、时间或日期时间
  56.  
  57.  
  58. //safe: 属性标志为在批量赋值时是安全的。
  59.  
  60.  
  61. //unsafe: 标志为不安全,所以他们不能被批量赋值。