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.'); }