侧边栏壁纸
博主头像
云BLOG 博主等级

行动起来,活在当下

  • 累计撰写 318 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
WEB

THINKPHP8 通用验证器

Administrator
2025-03-12 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

1. 创建通用验证器类

首先,创建一个通用的验证器类 CommonValidator,该类将包含通用的验证规则和场景验证功能。

php

复制

namespace app\common\validate;

use think\Validate;

class CommonValidator extends Validate
{
    // 定义通用的验证规则
    protected $rule = [
        'username' => 'require|max:25',
        'email'    => 'require|email',
        'password' => 'require|min:6',
        // 添加更多的验证规则
    ];

    // 定义错误提示信息
    protected $message = [
        'username.require' => '用户名不能为空',
        'username.max'    => '用户名最多不能超过25个字符',
        'email.require'   => '邮箱不能为空',
        'email.email'    => '邮箱格式错误',
        'password.require' => '密码不能为空',
        'password.min'    => '密码最少不能少于6个字符',
        // 添加更多的错误提示信息
    ];

    // 定义场景验证
    protected $scene = [
        'register' => ['username', 'email', 'password'],
        'login'    => ['username', 'password'],
        // 添加更多的场景
    ];

    // 支持批量验证
    protected $batch = true;

    // 添加更多的验证规则
    public function addRule($field, $rule, $message = '')
    {
        $this->rule[$field] = $rule;
        if ($message) {
            $this->message[$field . '.' . $rule] = $message;
        }
    }
}

2. 使用通用验证器

在你的控制器或其他地方,你可以通过参数调用这个通用验证器,并指定验证数组进行验证。

php

复制

namespace app\controller;

use app\common\validate\CommonValidator;
use think\facade\Request;

class User
{
    public function register()
    {
        $data = Request::post();

        // 实例化通用验证器
        $validator = new CommonValidator();

        // 指定场景验证
        if (!$validator->scene('register')->check($data)) {
            return json(['code' => 0, 'msg' => $validator->getError()]);
        }

        // 验证通过,继续处理注册逻辑
        // ...
    }

    public function login()
    {
        $data = Request::post();

        // 实例化通用验证器
        $validator = new CommonValidator();

        // 指定场景验证
        if (!$validator->scene('login')->check($data)) {
            return json(['code' => 0, 'msg' => $validator->getError()]);
        }

        // 验证通过,继续处理登录逻辑
        // ...
    }

    public function customValidation()
    {
        $data = Request::post();

        // 实例化通用验证器
        $validator = new CommonValidator();

        // 动态添加验证规则
        $validator->addRule('age', 'number|between:1,120', '年龄必须在1到120之间');

        // 批量验证
        if (!$validator->batch(true)->check($data)) {
            return json(['code' => 0, 'msg' => $validator->getError()]);
        }

        // 验证通过,继续处理逻辑
        // ...
    }
}

3. 扩展更多的验证规则

你可以通过 addRule 方法动态添加更多的验证规则。例如:

php

复制

$validator->addRule('age', 'number|between:1,120', '年龄必须在1到120之间');
$validator->addRule('phone', 'require|mobile', '手机号不能为空或格式错误');

4. 场景验证

CommonValidator 类中,你可以定义多个场景,每个场景可以指定需要验证的字段。例如:

php

复制

protected $scene = [
    'register' => ['username', 'email', 'password'],
    'login'    => ['username', 'password'],
];

在控制器中,你可以通过 scene 方法指定场景进行验证:

php

复制

$validator->scene('register')->check($data);

5. 批量验证

通过设置 batch 属性为 true,可以启用批量验证模式。在批量验证模式下,验证器会收集所有验证错误,而不是在遇到第一个错误时停止。

php

复制

$validator->batch(true)->check($data);

总结

通过以上步骤,你可以创建一个通用的验证模块,支持场景验证、批量验证,并且可以动态添加更多的验证规则。这个模块可以在整个项目中复用,减少重复代码,提高开发效率。

0

评论区