加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2023-02-16 12:53:06 所属栏目:PHP教程 来源:
导读:  本篇章节讲解Yii2框架数据验证操作。分享给大家供大家参考,具体如下:

  一、场景

  什么情况下需要使用场景呢?当一个模型需要在不同情境中使用时,若不同情境下需要的数据表字段和数据验证规则

  本篇章节讲解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,将错误信息存储在yii\base\Model::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 = \yii\bootstrap\ActiveForm::validate($model); Yii::$app->response->format = \yii\web\Response::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']]
 

(编辑:应用网_镇江站长网)

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