Yii 自定义表单验证规则和客户端验证

Yii使用rules来定义验证规则,一些常用的验证规则包括:


required: CRequiredValidator
filter: CFilterValidator
match: CRegularExpressionValidator
email: CEmailValidator
url: CUrlValidator
unique: CUniqueValidator
compare: CCompareValidator
length: CStringValidator
in: CRangeValidator
numerical: CNumberValidator
captcha: CCaptchaValidator
type: CTypeValidator
file: CFileValidator
default: CDefaultValueValidator
exist: CExistValidator
boolean: CBooleanValidator
date: CDateValidator
safe: CSafeValidator
unsafe: CUnsafeValidator


缺省情况是在服务器端验证,如果想在客户端验证,那么需要给CActiveForm传递enableClientValidation参数。

对于大部分情况上述规则就能满足需求,Yii会自动生成相应的客户端JS验证脚本。

但对于一些自定义的界面控件,例如时间选择控件,要求对时间的取值做一定的范围约束,那么就需要用到自定义验证规则了。

使用 array('begin_time', 'checkTime'), 然后定义checkTime(){...}函数可以完成服务器端的验证,不能完成客户端验证,如果要启用客户端验证,

需要从CValidator基类派生自己的验证类,如下所示:

class TimeValidator extends CValidator{
    protected function validateAttribute($object,$attribute){
         //TODO: server side validation
    }
    public function clientValidateAttribute($object,$attribute){
        $condition="value<'".date('Y-m-d H:i'."'");
        return "
        if(".$condition.") {
            messages.push(".CJSON::encode('开始时间必须大于当前时间').");
        }
        ";
    }
}

然后在rules中定义如下:array('f_begin_time', 'TimeValidator'),

你还可以给TimeValidator传递参数,array('f_begin_time', 'TimeValidator', 'mode'=>'test'), 

在clientValidateAttribute方法中使用$this->mode成员变量来访问。


by iefreer

你可能感兴趣的:(PHP,Yii)