加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Yii2框架数据验证操作实例详解

发布时间:2021-05-19 18:54:41 所属栏目:编程 来源:网络整理
导读:本篇章节讲授Yii2框架数据验证操纵。供各人参考研究详细如下: 一、场景 什么环境下必要行使场景呢?当一个模子必要在差异情境中行使时,若差异情境下必要的数据表字段和数据验证法则有所差异,则必要界说多个场景来区分差异行使情境。譬喻,用户
副问题[/!--empirenews.page--]

本篇章节讲授Yii2框架数据验证操纵。分享给各人供各人参考,详细如下:

一、场景

什么环境下必要行使场景呢?当一个模子必要在差异情境中行使时,若差异情境下必要的数据表字段和数据验证法则有所差异,则必要界说多个场景来区分差异行使情境。譬喻,用户注册的时辰必要填写email,登录的时辰则不必要,这时就必要界说两个差异场景加以区分。

默认环境下模子的场景是由rules()要领阐明的验证法则中行使到的场景抉择的,也可以通过包围scenarios()要领来更详细地界说模子的全部场景,譬喻:

['username','email','password','conpassword','verifyCode','reg_time','log_time'],'login' => ['username','rememberMe','log_time'] ]; }

个中键为场景名称,值为该场景下行使的模子属性(称为勾当属性)。

指定模子场景有以下两种要领:

要领一:

scenario = 'signup';

要领二:

'signup']);

可以通过指定验证法则中的'on'属性来阐明一条验证法则合用的场景:

'signup']

场景首要用于模子属性块赋值和数据验证。挪用模子类的load()要领举办块赋值的时辰,只有当前场景对应行使的属性会被赋值,挪用模子类的validate()要领举办数据验证的时辰,只有当前场景属性相干的且合用于当前场景的验证法则会被执行。

二、验证法则

Yii模子类通过实现rules()要领阐明行使的全部验证法则,示例:

'signup'] ]; }

一条法则可合用于一个或多个场景,一条法则可用来验证一个或多个属性,一个属性可对应一条或多条验证法则。假如没有指定'on'属性,验证法则会在全部场景下行使。

全部的验证法则都可以通过配置'message'属性来自界说错误信息,并且在错误信息内容中可以通过{attribute}来引用当前属性标署名称(属性标署名称必要在模子的attributeLabels()要领配置),通过{value}来引用当前属性的输入值,譬喻:

'register','message' => '{attribute}"{value}"已被占用!','on' => 'signup']//注册时用户名独一

yii验证的行使方法有以下三种:

1. 客户端验证:

Yii默认开启客户端验证,可以通过配置enableClientValidation参数为true开启,开启之后ActiveForm会读取模子中阐明的验证法则天生响应的Javascript验证代码。enableClientValidation参数配置的方法有三种:

(1)在视图文件ActiveForm中对整个form举办配置:

true ]); ?>

(2)在视图文件ActiveField中对单个field举办配置: 代码如下:field($model,'username',['enableClientValidation'=>false])->label('用户名') ?>

(3)在AR类的rules()函数中配置: 3,'max' => 30,'enableClientValidation' => true,'on' => 'register']

优先级:(2)>(1)>(3)

2. 处事器端验证:

(1)validate()

模子validate()要了解按照rules()要领中界说的验证法则对全部数据举办验证,验证通过返回true,不然将错误生涯在

(2)save()

模子save()要领中默认挪用validate()要领举办数据验证,验证通过则直接举办数据库操纵,返回true,不然不举办数据库操纵,返回false,将错误信息存储在yiibaseModel::errors属性中。若已显式挪用过validate(),可以通过传参停止在save()要领中一再验证数据:save(false)。

3. Ajax验证:

Yii默认封锁ajax验证,可以通过设置enableAjaxValidation参数为true开启。

客户端配置(两种方法):

(1)在视图文件ActiveForm中对整个form举办配置:

true ]); ?>

(2)在视图文件ActiveField中对单个field举办配置: 代码如下:field($model,['enableAjaxValidation'=>false])->label('用户名') ?>

优先级:(2)>(1)

处事器端处理赏罚:

request->isAjax) { $res = yiibootstrapActiveForm::validate($model); Yii::$app->response->format = yiiwebResponse::FORMAT_JSON; return $res; }

注:有些验证法则无法行使客户端验证,如:unique、exist等。

三、yii焦点验证器

Yii提供了一些焦点验证器,可以直接行使,阐明名目如下:

相识并行使yii的焦点验证器会闪开拓变得简朴很多。下面简朴对yii焦点验证器举办分类先容。

1. 不举办数据验证的验证器

(1)safe:而是把一个属性标志为安详属性。

(2)default:给值为空的属性配置默认值。

time()]

(3)trim:去除输入值首尾两侧多余空格。

(4)filter:滤镜,对数据举办名目化或一些其他处理赏罚后返回。

function($value) { ....return $value; }]

filter: 用于界说滤镜的php回调函数,可觉得全局函数名,匿名函数或其他。 skipOnArray:是否在输入为数组时跳过滤镜,默以为false。假如滤镜不能处理赏罚数组输入,应该配置为true。

2. 数据范例验证器

(1)boolean:布尔型。

true,'falseValue' => false,'strict' => true]

trueValue:代表真的值,默以为1。 falseValue:代表假的值,默以为0。 strict:是否要求输入数据必需严酷匹配trueValue或falseValue。默以为false。

(2)number:数字。

(3)double:双精度浮点型,等效于number验证器。

99.99,'min' => 0]

(4)integer:整数。

注:number、double、integer验证器都可以配置min、max参数来限定数字的最大、最小值(含界点)。

(5)string:字符串。

[3,30]]

length:指定输入字符串的长度限定。 min:字符串最小长度。 max:字符串最大长度。 encoding:字符串的编码方法,不配置则行使应用自身的charset属性值。默以为utf-8。

3. 数据名目验证器

(1)date:日期。

'php:Y:m:d','timestampAttribute' => 'startTime']

format:时刻名目,默以为“y-m-d”。 timestampAttribute:将时刻转化为时刻戳并赋值给某个属性。

(2)email:验证是否切合邮箱地点名目。

(3)ip:验证是否为有用IP地点。

(4)url:网址。

'http']

validSchemes:用于指定哪些URI方案会被视为有用,默以为['http','https']。 defaultScheme:若输入值没有对应的方案前缀,会行使的默认URI方案前缀。

(5)match:输入值是否满意某个正则表达式。

'/^[a-z]w*$/i']

pattern:正则表达式。 not:是否对验证功效取反。

4. 数据值验证器

(1)required:必填。

requiredValue:所祈望的值,若没配置则输入不能为空。 strict:搜查输入值时是否搜查范例。

(2)captcha:验证码。

true,'captchaAction' => 'site/captcha','skipOnEmpty' => false]

caseSensitive:是否巨细写敏感,默以为false。 captchaAction:指向用于渲染验证码图片的captcha要领的路由,默以为'site/captcha'。 skipOnEmpty:输入为空时是否跳过验证,默以为false。

(3)compare:较量。

'conpassword','operator' => '==']

compareAttribute:与指定属性值较量的属性名称。 compareValue:与某个常量值较量。 operator:较量操纵符。

个中compareAttribute默认在验证属性后头加后缀“_repeat”作为另一个较量属性的名称,operator默以为“==”,即:['password','compare']法则暗示验证password与password_repeat的值是否相称。

(4)each:验证数组。

['integer']]

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读