先看一下例子:
public function rules()
{
return array(
array('username, password', 'required'),
array('rememberMe', 'boolean'),
array('password', 'authenticate'),
);
}
public function authenticate($attribute,$params)
{
$this->_identity=new UserIdentity($this->username,$this->password);
if(!$this->_identity->authenticate())
$this->addError('password','错误的用户名或密码。');
}
上述代码指定:username
和 password
为必填项, password
应被验证(authenticated),rememberMe
应该是一个布尔值。
rules()
返回的每个规则必须是以下格式:
array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...附加选项)
其中 AttributeList(特性列表)
是需要通过此规则验证的特性列表字符串,每个特性名字由逗号分隔;Validator(验证器)
指定要执行验证的种类;on
参数是可选的,它指定此规则应被应用到的场景列表; 附加选项是一个名值对数组,用于初始化相应验证器的属性值。
预定义的验证器别名的完整列表:
-
boolean
: CBooleanValidator 的别名, 确保特性有一个 CBooleanValidator::trueValue 或CBooleanValidator::falseValue 值。 -
captcha
: CCaptchaValidator 的别名,确保特性值等于 CAPTCHA 中显示的验证码。 -
compare
: CCompareValidator 的别名,确保特性等于另一个特性或常量。 -
email
: CEmailValidator 的别名,确保特性是一个有效的Email地址。 -
default
: CDefaultValueValidator 的别名,指定特性的默认值。 -
exist
: CExistValidator 的别名,确保特性值可以在指定表的列中可以找到。 -
file
: CFileValidator 的别名,确保特性含有一个上传文件的名字。 -
filter
: CFilterValidator 的别名,通过一个过滤器改变此特性。 -
in
: CRangeValidator 的别名,确保数据在一个预先指定的值的范围之内。 -
length
: CStringValidator 的别名,确保数据的长度在一个指定的范围之内。 -
match
: CRegularExpressionValidator 的别名,确保数据可以匹配一个正则表达式。 -
numerical
: CNumberValidator 的别名,确保数据是一个有效的数字。 -
required
: CRequiredValidator 的别名,确保特性不为空。 -
type
: CTypeValidator 的别名,确保特性是指定的数据类型。 -
unique
: CUniqueValidator 的别名,确保数据在数据表的列中是唯一的。 -
url
: CUrlValidator 的别名,确保数据是一个有效的 URL。下面我们列出了几个只用这些预定义验证器的示例:
// 用户名为必填项 array('username', 'required'), // 用户名必须在 3 到 12 个字符之间 array('username', 'length', 'min'=>3, 'max'=>12), // 在注册场景中,密码password必须和password2一致。 array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'), // 在登录场景中,密码必须接受验证。 array('password', 'authenticate', 'on'=>'login'),
大家可能比较郁闷一点,这么多预定义的验证类,他们的属性都有哪些呢?比如上面红色部门,我怎么确定每个验证器类要用到哪些?其实很简单。
点开每一个类,都会看到类似图片上的东西,点击Properties,会看到验证器类的全部属性,只要看懂他们什么意思就行了。