一处编写,三处运行的Yii2表单验证器

说起Yii2的表单验证,的确是具有非常强大的功能,在实现输入数据有效检测的同时,更具有一处编写、三处运行的便利优势,在这里我就给各位唠唠这个便利优势。

我所说的一处编写,就是所有的表单验证代码都在rules()方法中定义。
rules()方法通常存在于ModelActiveRecord(AR)中,rules规则的示例代码如下:

    public function rules() {
        return [
            [['name','age'],'required'],//name,age是必填项'required'
            //name项是个字符串(string),其长度不能少于2个字符,也不能多于30个字符
            ['name','yii\validators\StringValidator','min'=>2,'max'=>30,'enableClientValidation' =>true],//默认情况下enableClientValidation是true,即客户端验证是生效的
            //['name','string','min'=>2,'max'=>30],//与上句等效,'string'是验证器'yii\validators\StringValidator'的别名
            //age项必须是一个有效的整数(integer),其值不能小于18,也不能大于60
            ['age','integer','min'=>18,'max'=>60],
        ];
    }

我所说的三处运行是指验证器在:
1、客户端运行
2、服务器端运行
3、Ajax运行

一处编写,三处运行,Yii2真的有这么神奇吗?
不错,Yii2的确是这么神奇!让我们一起来看一下Yii2验证器在这三处进行数据验证的实现方式:
1、对于服务器端验证,是通过调用$model->validate()或AR的$model->save()方法实现的,这也是传统意义的数据验证方式。
2、对于客户端验证则,是由Yii2对rules()中的验证规则进行逐条解析,自动帮助我们生成相应的JavaScript验证代码而实现的。
3、对于Ajax验证,外观形式上与客户端验证相似,但其实现机制大不相同,Ajax验证实际上就是将客户端的请求使用Ajax方式进行服务器端验证,然后再将验证结果发送给客户端。

关于这三处运行的验证,我编写了三篇文档:
Yii2的表单验证之一:客户端验证
Yii2的表单验证之二:服务器端验证
Yii2的表单验证之三:Ajax验证

不当之处请多多指正!欢迎探讨,相互学习!

(全文完)

你可能感兴趣的:(一处编写,三处运行的Yii2表单验证器)