yii框架零碎

声明验证规则

一旦用户提交了他的输入,模型被填充,我们就需要在使用前确保用户的输入是有效的。 这是通过将用户的输入和一系列规则执行验证实现的。我们在 rules() 方法中指定这些验证规则, 此方法应返回一个规则配置数组。

class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe=false;

private $_identity;

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 参数是可选的,它指定此规则应被应用到的场景列表; 附加选项是一个名值对数组,用于初始化相应验证器的属性值。

有三种方式可在验证规则中指定 Validator 。第一, Validator 可以是模型类中一个方法的名字,就像上面示例中的 authenticate 。验证方法必须是下面的结构:

/**
* @param string 所要验证的特性的名字
* @param array 验证规则中指定的选项
*/
public function ValidatorName($attribute,$params) { ... }
第二,Validator 可以是一个验证器类的名字,当此规则被应用时, 一个验证器类的实例将被创建以执行实际验证。规则中的附加选项用于初始化实例的属性值。 验证器类必须继承自 CValidator。

第三,Validator 可以是一个预定义的验证器类的别名。在上面的例子中, required 名字是CRequiredValidator 的别名,它用于确保所验证的特性值不为空。 下面是预定义的验证器别名的完整列表:

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'),

posted on 2011-06-21 13:28  天空尚兰  阅读(292)  评论(0编辑  收藏  举报

导航