Php代码
- // CValidator.php
- public static $builtInValidators=array(
- 'required'=>'CRequiredValidator', // 验证属性值必需有值,不能为空
- 'filter'=>'CFilterValidator', // 用过滤器转换属性的值
- 'match'=>'CRegularExpressionValidator', // 验证属性值匹配一个正则表达式
- 'email'=>'CEmailValidator', // 验证属性值为有一个有效的Email地址
- 'url'=>'CUrlValidator', // 验证属性值是一个有效的URL
- 'unique'=>'CUniqueValidator', // 验证属性值在表中的对应列中是唯一的
- 'compare'=>'CCompareValidator', // 验证属性值与另一个属性的值相等
- 'length'=>'CStringValidator', // 验证属性值的长度在一个范围内
- 'in'=>'CRangeValidator', // 验证属性值在一个预定义列表中
- 'numerical'=>'CNumberValidator', // 验证属性值是数字
- 'captcha'=>'CCaptchaValidator', // 验证属性的值等于一个显示的CAPTCHA(验证码)的值
- 'type'=>'CTypeValidator', // 验证属性值是一个指定的数据类型
- 'file'=>'CFileValidator', // 验证属性值包含上传的文件
- 'default'=>'CDefaultValueValidator', // 验证属性值为分配的默认值
- 'exist'=>'CExistValidator', // 验证属性值在表中的对应列中存在
- 'boolean'=>'CBooleanValidator', // 验证属性值是布尔值(true或false)
- 'safe'=>'CSafeValidator', // 标记属性值为安全
- 'unsafe'=>'CUnsafeValidator', // 标记属性值为不安全
- 'date'=>'CDateValidator', // 验证属性值是日期
- );
使用方法就是在 CActiveRecord 或 CFormModel 的子类中重写 rules() 函数,如下:
Php代码
- public function rules()
- {
- return array(
- array('username,email,password,password2', 'required'),
- array('username', 'length', 'min'=>6, 'max'=>24),
- array('email', 'email'),
- array('password', 'length', 'min'=>6, 'max'=>16),
- array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'),
- );
- }
rules() 中返回的数组一般如下:
Php代码
- array('属性名1,属性名2', '验证器别名', 'on'=>'场景', '验证器属性'=>'值', '...'=>'...')
array() 中前两个值是必须的,后面则是可选的,当然你要看具体验证器了
当有多个属性要使用同一个验证器时,可以写在同一条规则中,属性名使用英文逗号分隔
验证器别名是必须的
'on'=>'场景' 是可选的, 场景是在初始化某个具体的 CActiveRecord 类时通过构造函数设定的。
如:
class Post extends CActiveRecord
在控制器类中
- $model=new Post('search');
其中 'search' 就是场景,这样就设置了场景。
当然,CActiveRecord 类的构造函数中,场景的默认值是 'insert'
然后,验证器属性则要看某个具体验证器了,如
Php代码
- class CStringValidator extends CValidator
- {
- public $max;
- public $min;
- public $is;
- public $tooShort;
- public $tooLong;
- public $allowEmpty=true;
- public $encoding;
验证器中的验证可以定制,例如LoginForm中的password
Php代码
- public function rules()
- {
- return array(
- // username and password are required
- array('username, password', 'required'),
- // rememberMe needs to be a boolean
- array('rememberMe', 'boolean'),
- // password needs to be authenticated
- array('password', 'authenticate'),
- );
- }
Php代码
- /**
- * Authenticates the password.
- * This is the 'authenticate' validator as declared in rules().
- */
- public function authenticate($attribute,$params)
- {
- $this->_identity=new UserIdentity($this->username,$this->password);
- if(!$this->_identity->authenticate())
- $this->addError('password','Incorrect username or password.');
- }