ThinkPHP(9):验证器验证、控制器验证、独立验证

本文详细介绍了ThinkPHP5.1框架中数据验证的使用,包括验证器的创建、规则定义、错误提示、批量验证、静态代理以及控制器中的验证方法。验证器通过继承Validate类并定义rule属性来设置验证规则,可以有效确保数据的完整性和安全性。此外,还展示了如何在控制器中直接调用验证器进行数据验证,以及如何实现静态代理以统一验证方法的调用。
摘要由CSDN通过智能技术生成

验证器验证

1、ThinkPHP5.1推荐使用验证器进行数据验证(也支持使用\think\Validate类进行独立验证)
2、验证器使用的是Validate类中的rule属性
3、验证器是一个类,定义验证器时要继承Validate类
4、验证器可以创建在应用application目录下的任何一个可以访问的目录下,这个访问不是指外部的url访问,只需要指定正确的命名空间
5、验证器其实是完成框架的think\Validate类中的属性protected $rule=[] 的初始化
6、在控制器中可以直接实例化调用check()完成验证,还可以创建一个自定义的静态代理,来统一验证方法的调用方式

定义验证器

<?php
//用户信息表的字段验证器

namespace app\validate;

use think\Validate;

class User extends Validate
{

    //推荐格式,验证规则,可参照Validate.php
    protected $rule = [
        'name' => [
            'require' => 'require',
            'min' => 5,
            'max' => 20
        ],
        'email' => [
            'require' => 'require',
            'email' => 'email'
        ],
        'password' => [
            'require' => 'require',
            'min' => 5,
            'max' => 12,
            'alphaNum' => 'alphaDash'  //密码必须是字母或数字
        ],
        'mobile' => [
            'require' => 'require',
            'mobile' => 'mobile'
        ]
    ];

    //错误提示信息,若不定义使用默认信息

    protected $message  =   [
        'name' => [
            'require' => '用户名不能为空',
            'min' => '用户名过短',
            'max' => '用户名过长'
        ],
        'email' => [
            'require' => '邮箱不能为空',
            'email' => '不符合邮箱格式'
        ],
        'password' => [
            'require' => '密码不能为空',
            'min' => '最短5位',
            'max' => '最长12位',
            'alphaNum' => '密码必须是字母或数字'
        ],
        'mobile' => [
            'require' => '手机号不能为空',
            'mobile' => '不符合手机格式'
        ]
    ];
}

数据验证

<?php

namespace app\index\controller;

use think\Controller;
use app\Validate\User;   //用户自定义的验证器

class Demo9 extends Controller
{

    //1、验证器使用的是Validate类中的rule属性
    public function test1()
    {
        //要验证的数据
        $data = [
            'name' => 'zmz',
            'email' => 'zmz@qq.com',
            'password' => 'zmz123456',
            'mobile' => '15065845666'
        ];

        //2、数据验证
        $validate = new User;
        if (!$validate->check($data)) {
            //验证失败,输出提示信息
            return $validate->getError();
        }

        return '验证通过';
    }
}

批量验证

默认情况下,一旦有某个数据的验证规则不符合,就会停止后续数据及规则的验证,如果希望批量进行验证,可以设置:

class Index extends Controller
{
    // 是否批量验证
    protected $batchValidate = true;

    public function index()
    {
        $result = $this->validate(
            [
                'name'  => 'thinkphp',
                'email' => 'thinkphp@qq.com',
            ],
            'app\index\validate\User');

        if (true !== $result) {
            // 验证失败 输出错误信息
            dump($result);
        }
    }
}

在非控制器的地方如果需要执行批量验证,可以在验证的时候添加是否批量的方法batch()

namespace app\common\service;

use app\common\validate\User as UserValidate;

class Test
{
    public function validateTest($data)
    {
        $validata = new UserValidate;
        $result   = $validate->batch()->check($data);
        if ($result !== true) {
            dump($result);
        }
    }
}

静态代理

实现验证器的静态代理

<?php

namespace app\faced;
use think\Facade;

class User extends Facade
{
    protected static function getFacadeClass()
    {
        return  'app\validate\User';
    }
}

验证数据

<?php
namespace app\index\controller;
use think\Controller;
use app\faced\User;

class Demo9 extends Controller
{

    //1、验证器使用的是Validate类中的rule属性
    public function test1()
    {
        //要验证的数据
        $data = [
            'name' => 'zmz123',
            'email' => 'zmz@qq.com',
            'password' => 'zmz123456',
            'mobile' => '15065845666'
        ];
        //使用当前验证器的静态代理
        if (!User::check($data)) {
            //验证失败,输出提示信息
            return User::getError();
        }
        return '验证通过';
    }
}

控制器验证

//调用控制器中的validate方法进行验证,也需要使用用户自定义的验证器
 public function test2()
 {

     /**
      * $this->validate($data ,$validate,$message)
      * $data要验证的数据,$validate验证规则,必须
      * $message 提示信息,为空时使用默认信息,可选
      * 返回验证结果
      */

     //要验证的数据
     $data = [
         'name' => 'zmz123',
         'email' => 'zmz@qq.com',
         'password' => 'zmz123456',
         'mobile' => '15065845666'
     ];

     //验证规则
     $validate = 'app\validate\User';

     //数据验证
     $res = $this->validate($data, $validate);
     if ($res !== true) {
         return $res;
     }

     return '验证通过';
 }

独立验证

独立验证的含义:

任何时候,都可以直接使用think\Validate类而不需要定义验证器类进行独立的验证操作

独立验证文档

推荐格式:

<?php

namespace app\index\controller;
use think\Controller;
use think\facade\Validate;

class Demo9 extends Controller
{
    public function test()
    {
        //验证规则
        $rule = [
            'name' => [
                'require' => 'require',
                'min' => 5,
                'max' => 20
            ],
            'email' => [
                'require' => 'require',
                'email' => 'email'
            ]
        ];
        //提示信息
        $msg = [
            'name' => [
                'require' => '用户名不能为空',
                'min' => '用户名过短',
                'max' => '用户名过长'
            ],
            'email' => [
                'require' => '邮箱不能为空',
                'email' => '不符合邮箱格式'
            ]
        ];
        //数据
        $data = [
            'name'  => 'thinkphp',
            'email' => 'thinkphp@qq.com',
        ];

        //数据验证
        $validate = Validate::make($rule, $msg);
        $result = $validate->check($data);

        if (!$result) {
            return $validate->getError();
        }

        return '验证通过';
    }
}

注: 与之前说的验证器验证其实本质一样,只是不需要定义验证器,把所有代码放在了一块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值