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

43 篇文章 0 订阅

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值