thinkphp 验证器

方法一

验证器的使用 单独抽离成一个文件

declare (strict_types = 1);

namespace app\validate;

use think\Validate;

class ValidateAll extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     * require|max:25 验证规则, 可以多个, 用|隔开
     */
    protected $rule = [
        'username'  =>  'require|max:25|checkName:thinkphp',
        'password' =>  'require|min:6',
        'email' =>  'require|email',
        'price' =>  'float',
        'sum' =>  'number|between:1,100', // 数字, 1-100之间
    ];

    // 自定义规则
    protected function checkName($value, $rule, $data = [])
    {
        return $rule == $value ?  $rule. '是违禁词' : true;
    }

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     * 返回的错误信息提示, 如果不满足要求, 可以自定义错误信息
     * @var array
     */
    protected $message = [
        'username.require' => '用户名必须',
        'username.max'     => '用户名最多不能超过25个字符',
        'password.require' => '密码必须',
        'password.min'     => '密码最少不能少于6个字符',
        'email.require' => '邮箱必须',
        'email.email' => '邮箱格式错误',
    ];

    // 场景验证 不同场景验证不同字段  例如 新增,编辑, 登录, 注册
    protected $scene = [
        'login' => ['username', 'password'],
        'register' => ['username', 'password', 'email'],
    ];
}

使用的地方

namespace app\controller;

use app\BaseController;
use app\validate\ValidateAll;
use think\exception\ValidateException;


class Login extends  BaseController
{
    public function index()
    {
       // 公共的验证器
       try {
            // 场景验证
            // validate(ValidateAll::class)->scene('register')->batch(true)->check([
            //   'username' => 'thinkphp',
            //   'password' => '122323',
            //   'email' => '1@gmail.com'
            // ]);
            validate(ValidateAll::class)->batch(true)->check([
                'username' => 'thinkphp',
                'password' => '122323',
                'email' => '1@gmail.com'
            ]);
        } catch (ValidateException $e) {
            // 验证失败 输出错误信息
            dump($e->getError());
        }

    }
}

方法二

直接在组件 类文件使用验证器规则

namespace app\controller;

use app\BaseController;
use think\Validate;


class Login extends  BaseController
{
    public function index()
    {
//        单独在组件使用验证器规则
//        $val = Validate::rule([
//            'username'  =>  'require|max:25|checkName:thinkphp',
//            'password' =>  'require|min:6',
//            'email' =>  'require|email',
//            'price' =>  'float',
//            'sum' =>  'number|between:1,100', // 数字, 1-100之间
//        ]);
//        $res = $val->batch(true)->check([
//            'username' => 'thinkphp',
//            'password' => '122323',
//            'email' => '1@gmail.com'
//        ]);
//        if (!$res) {
//            dump($val->getError());
//        }

//        或者 需要自定义验证方法

        $validate = new class extends Validate {
            protected function checkName($value, $rule, $data = [])
            {
                return $rule == $value ?  $rule. '是违禁词' : true;
            }
        };
        $validate->rule([
            'username'  =>  'require|max:25|checkName:thinkphp',
            'password' =>  'require|min:6',
            'email' =>  'require|email',
            'price' =>  'float',
            'sum' =>  'number|between:1,100', // 数字, 1-100之间
        ]);

        // 验证数据
        $data = [
            'username' => 'thinkphp',
            'password' => '122323',
            'email' => '1@gmail.com'
        ];

        // 执行验证
        $res = $validate->batch(true)->check($data);
        if (!$res) {
            dump($validate->getError());
        }
        echo $res;
    }

  }

posted on 2024-01-24 22:51  完美前端  阅读(138)  评论(0)    收藏  举报

导航