11 验证器《ThinkPHP6 入门到电商实战》

举报
1_bit 发表于 2022/09/25 01:21:25 2022/09/25
【摘要】 注:示例来源于官方手册 一、验证器定义 验证器用于对数据进行验证,你可以理解为一个“层”,在传入数据时可以使用这个层对数据进行验证,这样就可以不用频繁的在方法中编写代码去验证,只需要编写一个验证层即可...

注:示例来源于官方手册

一、验证器定义

验证器用于对数据进行验证,你可以理解为一个“层”,在传入数据时可以使用这个层对数据进行验证,这样就可以不用频繁的在方法中编写代码去验证,只需要编写一个验证层即可,此操作需要自己编写对应的代码,本节只是介绍验证器的使用。

此时我们在 app 目录下新建一个 validate 文件夹,在其中新建一个 User.php 假设用于用户传入的用户信息进行验证。

在这里插入图片描述
随后在 User.php 中编写如下代码:

<?php
namespace app\validate;
use think\Validate;

class User extends Validate
{
    protected $rule =   [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
        'email' => 'email',    
    ];
    
    protected $message  =   [
        'name.require' => '名称必须',
        'name.max'     => '名称最多不能超过25个字符',
        'age.number'   => '年龄必须是数字',
        'age.between'  => '年龄只能在1-120之间',
        'email'        => '邮箱格式错误',    
    ];

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

以上代码中可以看到,当前 User 类继承至验证器 Validate 类,其中 protected 的属性 rule 是表示验证规则,为一个数组;name 表示这个字段名 require 表示为必须,并且 max 最大字符不能超过 25个;age 是 number 类型数据,在 1-120 之间,同一个字段多个不同的规则使用 | 进行分隔,若只有一个规则就如同 email 字段的规则是 email 表示是邮件字段。

在此还发现了 message 属性,其中指定了每个规则验证不通过时的提示信息。

二、验证器使用方法

以下是一个最简单的验证器使用方法:

public function userValidate(){
    
    try {
        validate(User::class)->check([
            'name'  => 'thinkphp',
            'email' => 'thinkphpcom',
        ]);
    } catch (ValidateException $e) {
        // 验证失败 输出错误信息
        dump($e->getError());
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

当验证器验证错误将会抛出异常,并且会中断验证,使用验证器很简单,use 之后直接使用 validate(User::class)指定验证器后使用 check 方法即可。在 check 方法中需要传入一个数组,数组值为需要验证字段的信息,在以上示例中我的 email 是错误的邮箱编写格式,此时将会抛出异常:
在这里插入图片描述

三、设置批量验证

在以上一点中已经说过,验证是会中断的,若有多个错误信息时,需要批量验证的话可以设置 batch 为 true 即可,如下示例:

public function userValidate(){
   
   try {
       validate(User::class)->batch(true)->check([
           'name'  => 'thinkphp',
           'age'  => 130,
           'email' => 'thinkphpcom',
       ]);
   } catch (ValidateException $e) {
       // 验证失败 输出错误信息
       dump($e->getError());
   }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

以上实例中,我的 age 值明显大于了本身规则的限定在 120 以内,所以此时将会抛出两个提示:
在这里插入图片描述

四、自定义验证规则

验证器还支持自定义的验证规则,例如以下示例,首先是 user 验证器中:

class User extends Validate
{
    protected $rule =   [
        'name'  => 'require|checkName:敏感字,',
        'age'   => 'number|between:1,120',
        'email' => 'email',    
    ];
    
    protected $message  =   [
        'name.require' => '名称必须',
        'name.max'     => '名称最多不能超过25个字符',
        'age.number'   => '年龄必须是数字',
        'age.between'  => '年龄只能在1-120之间',
        'email'        => '邮箱格式错误',    
    ];

    // 自定义验证规则
    protected function checkName($value, $rule, $data=[])
    {
        return $rule == $value ? true : '敏感字符';
    }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

此时修改了 rule 的验证规则 name,其中有一个 checkName 规则是我们自定义的方法,二冒号后面的敏感字是该方法的参数,随后我们可以查看方法 checkName,其中 value 是需要验证的字符,rule 是敏感字,data 是所有需要验证的信息数组;接着我们传入对应的变量:

try {
    validate(User::class)->batch(true)->check([
        'name'  => '敏感字',
        'age'  => 110,
        'email' => '123@163.com',
    ]);
} catch (ValidateException $e) {
    // 验证失败 输出错误信息
    dump($e->getError());
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

此时将会抛出异常:

在这里插入图片描述

五、手动使用验证器

验证器还支持自己手动编写规则,自行调用,如下示例:

public function userValidate(){
    
    $validate = \think\facade\Validate::rule('age', 'number|between:1,120')
    ->rule([
        'name'  => 'require|max:25',
        'email' => 'email'
    ]);
    
    $data = [
        'name'  => 'thinkphp',
        'email' => 'thinkphp'
    ];
    
    if (!$validate->check($data)) {
        dump($validate->getError());
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

手动调用方式大致相同,初始化规则创建验证器对象后,在使用check 时进行check 即可。

更多验证规则可以查看手册:https://www.kancloud.cn/manual/thinkphp6_0/1037629
且官方还提供了路由验证、令牌、注解验证 等验证,可以自行查看官方手册,本专栏只介绍一般方法。

文章来源: i1bit.blog.csdn.net,作者:1_bit,版权归原作者所有,如需转载,请联系作者。

原文链接:i1bit.blog.csdn.net/article/details/126231960

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。