原文地址:http://blog.csdn.net/hy840429/article/details/6725660 public array rules () 返回属性的有效性规则。 声明验证规则,应重写此方法。 每个规则是数组具有以下结构: array(‘attribute list’, ‘validator name’, ‘on’=>’scenario name’, …validation parameters…) 注: * attribute list: 指定属性 (以逗号分隔) 进行验证 ; * validator name: 指定要使用的验证程序。 一种验证方法必须具有以下签名: // $params refers to validation parameters given in the rule function validatorName($attribute,$params) 内置的验证程序是指在 CValidator::builtInValidators 中声明的验证程序之一。 验证程序的类是扩展 CValidator 的类。 on: 应执行有效性规则时,此选项指定的情形。 * 附加参数用于初始化相应的验证程序属性。 请参阅 individal 验证器类 API 可能的属性。 以下是一些例子: array( array(‘username’, ‘required’), 预定义完整列表: * 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的结合就实现验证功能了。 例子: 【view】 beginWidget(‘CActiveForm’); ?> errorSummary($model); ?> //注1:这里显示出错时,报错的地方 …… endWidget(); ?> 【control】 $model=new user; if(isset($_POST['user'])) { $model->attributes=$_POST['user']; if($model->validate() && $model->save()) //注2:$model->validate()就是在调用model.rules进行验证 $this->redirect(array(‘view’,'id’=>$model->id)); } 【model】 class user extends CActiveRecord …… public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array(‘username, password, email’, ‘required’), array(‘username, password, email’, ‘length’, ‘max’=>128), array(‘id, username, password, email’, ‘safe’, ‘on’=>’search’), ); } …… 要实现更强大复杂的验证功能也就在rules()里做文章了。 有关用Ajax验证,会在Ajax专题中具体介绍。当然有必要时,也会再加的。
================================================== 遇到个很囧的model rules问题(测试create与update的username)
----=====-------=======----------=======---------========------ 缺省 new 出来的 model 实例的 scenario 是 insert 而不是 create ,你应该用 $model = new ModelClass('create'); 去试试。 ------------------------- 怪不得我以前写 create时候失败 后来new XXXXX('create')才可以 原来缺省 insert.
=========================================== 1.场景(scenario)多了怎么办? --------------====================---------------------------==================
|
|