漫谈yii预定义验证
在每一个Model中,总会一些自动生成的验证规则。它是入库前验证是否报错的先决条件。模型中,model的示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('realname, gender, mobile, province, city, district, address, zipcode', 'required'), array('realname, mobile, province, city, district', 'length', 'max'=>30), array('address', 'length', 'max'=>300), array('zipcode', 'length', 'max'=>10), array('updated','default', 'value'=>date('Y-m-d H:i:s'), 'setOnEmpty'=>false, 'on'=>'update'), array('created, updated', 'default','value'=>date('Y-m-d H:i:s'), 'setOnEmpty'=>false, 'on'=>'insert'), // The following rule is used by search(). // Please remove those attributes that should not be searched. array('id, user_id, realname, gender, mobile, province, city, district, address, zipcode, remark', 'safe', 'on'=>'search'), ); } |
上面即是一个典型的模型预定定验证规则。下面,我将能接触到的验证,细细的列出来。
- boolean : CBooleanValidator 的别名, 确保属性的值是CBooleanValidator::trueValue 或 CBooleanValidator::falseValue 。
- captcha : CCaptchaValidator 的别名,确保了特性的值等于 CAPTCHA 显示出来的验证码。
- compare : CCompareValidator 的别名, 确保了特性的值等于另一个特性或常量。
- email : CEmailValidator 的别名,确保了特性的值是一个有效的电邮地址。
- default : CDefaultValueValidator 的别名, 为特性指派了一个默认值。
- exist : CExistValidator 的别名, 确保属性值存在于指定的数据表字段中。
- file : CFileValidator 的别名, 确保了特性包含了一个上传文件的名称。
- filter : CFilterValidator 的别名, 使用一个filter转换属性。
- in : CRangeValidator 的别名, 确保了特性出现在一个预订的值列表里。
- length : CStringValidator 的别名, 确保了特性的长度在指定的范围内。
- match : CRegularExpressionValidator 的别名, 确保了特性匹配一个正则表达式。
- numerical : CNumberValidator 的别名, 确保了特性是一个有效的数字。
- required : CRequiredValidator 的别名, 确保了特性不为空。
- type : CTypeValidator 的别名, 确保了特性为指定的数据类型。
- unique : CUniqueValidator 的别名, 确保了特性在数据表字段中是唯一的。
- url : CUrlValidator 的别名, 确保了特性是一个有效的路径。
如何实现验证功能 ?
事实上CModel.rules()+CActiveForm.validate的结合就实现验证功能了。下面看示例:
Mocdel的预定验证规定代码与上面一致,则在此略过。
Controller的动作action的相关代码:
1 2 3 4 5 6 7 8 9 10 11 | $model=new ModelName; if(isset($_POST['ModelName'])) { $model->attributes=$_POST['ModelName']; //注2:$model->validate()就是在调用model.rules进行验证 if($model->validate() && $model->save()) { $this->redirect(array('view','id'=>$model->id)); } } |
视图view表单相关代码:
1 2 3 4 | >?php beginWidget(‘CActiveForm’); ?> >?php errorSummary($model); ?> //注1:这里显示出错时,报错的地方 …… >?php endWidget(); ?> |
