public array
rules ()
| ||
{return} | array | 要调用 validate() 时应用的有效性规则。 |
返回属性的有效性规则。
声明验证规则,应重写此方法。 每个规则是数组具有以下结构:
array('attribute list', 'validator name', 'on'=>'scenario name', ...validation parameters...)
注:
-
attribute list: 指定属性 (以逗号分隔) 进行验证 ;
-
validator name: 指定要使用的验证程序。 它可以是方法的一个模型类的一个内置的验证器或验证程序类 (或其路径的别名) 名称的名称。 一种验证方法必须具有以下签名:
// $params refers to validation parameters given in the rule
内置的验证程序是指在 CValidator::builtInValidators 中声明的验证程序之一。 验证程序的类是扩展 CValidator 的类。
function validatorName($attribute,$params)
-
on: 应执行有效性规则时,此选项指定的情形。 用逗号分开不同的方案。 如果未设置此选项,将在任何情况下应用规则。 请 方案 中有关此选项的更多详细信息,参阅。
- 附加参数用于初始化相应的验证程序属性。 请参阅 individal 验证器类 API 可能的属性。
以下是一些例子:
array(array('username', 'required'),
array('username', 'length', 'min'=>3, 'max'=>12),
array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'),
array('password', 'authenticate', 'on'=>'login'),
);
预定义完整列表:
-
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】
<div class="form">
<?php $form = $this->beginWidget('CActiveForm'); ?>
<?php echo $form->errorSummary($model); ?> //注1:这里显示出错时,报错的地方
……
<?php $this->endWidget(); ?>
</div>
【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专题中具体介绍。当然有必要时,也会再加的。
==============================================
点缀娱乐 点缀娱乐 点缀娱乐 点缀娱乐 点缀娱乐 点缀娱乐 点缀娱乐 点缀娱乐
==============================================