一处编写,三处运行的Yii2表单验证器 [ 技术分享 ]
说起Yii2的表单验证,的确是具有非常强大的功能,在实现输入数据有效检测的同时,更具有一处编写、三处运行
的便利优势,在这里我就给各位唠唠这个便利优势。
我所说的一处编写,就是所有的表单验证代码都在rules()
方法中定义。
rules()方法通常存在于Model
或ActiveRecord(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验证
不当之处请多多指正!欢迎探讨,相互学习!
(全文完)
共 0 条回复
没有找到数据。
阿江
注册时间:2015-10-18
最后登录:2024-03-03
在线时长:186小时21分
最后登录:2024-03-03
在线时长:186小时21分
- 粉丝94
- 金钱16816
- 威望160
- 积分20276