方法一
验证器的使用 单独抽离成一个文件
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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix