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);总结
通过以上步骤,你可以创建一个通用的验证模块,支持场景验证、批量验证,并且可以动态添加更多的验证规则。这个模块可以在整个项目中复用,减少重复代码,提高开发效率。
评论区