声明:由于官方的 think-validate验证器 不兼容
PHP8.0
。所以这里重复造轮子
基于PHP7.4 + 的Validate实现。基于ThinkPHP6修改的可用于 webman 的通用validate数据验证器。
composer require tinywan/validate
<?php
namespace app\index\validate;
use Tinywan\Validate\Validate;
class UserValidate extends Validate
{
protected $rule = [
'name' => 'require|max:25',
'age' => 'require|number|between:1,120',
'email' => 'require|email'
];
protected $message = [
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'age.require' => '年龄必须是数字',
'age.number' => '年龄必须是数字',
'age.between' => '年龄只能在1-120之间',
'email.require' => '邮箱必须是数字',
'email.email' => '邮箱格式错误'
];
}
验证器调用代码如下:
$data = [
'name' => 'Tinywan',
'age' => 24,
'email' => 'Tinywan@163.com'
];
$validate = new \app\index\validate\UserValidate;
if (!$validate->check($data)) {
var_dump($validate->getError());
}
自定义函数 functions.php
添加validate()
函数
/**
* @desc 验证器助手函数
* @param array $data 数据
* @param string|array $validate 验证器类名或者验证规则数组
* @param array $message 错误提示信息
* @param bool $batch 是否批量验证
* @param bool $failException 是否抛出异常
* @return bool
* @author Tinywan(ShaoBo Wan)
*/
function validate(array $data, $validate = '', array $message = [], bool $batch = false, bool $failException = true)
{
if (is_array($validate)) {
$v = new \Tinywan\Validate\Validate();
$v->rule($validate);
} else {
if (strpos($validate, '.')) {
[$validate, $scene] = explode('.', $validate);
}
$class = false !== strpos($validate, '\\') ? $validate : $validate;
$v = new $class();
if (!empty($scene)) {
$v->scene($scene);
}
}
return $v->message($message)->batch($batch)->failException($failException)->check($data);
}
验证器调用代码如下:
$data = [
'name' => 'Tinywan',
'age' => 24,
'email' => 'Tinywan@163.com'
];
validate($data, \app\index\validate\UserValidate::class . '.issue');
验证错误会自动抛出异常
更多用法可以参考6.0完全开发手册的验证章节
unique唯一验证报错 Tinywan\Validate\Validate::unique(): Argument #2 ($data) must be of type array, string given
不推荐使用这个验证唯一性!为啥?不安全,这个唯一验证是是直接调用数据库查询的
还有别的方式吗 大佬
大佬你这个插件有点让人误解了是吗,我安装了think-validate 对php8是支持的啊
那你用think-validate就可以啦!
@864328615 自己实现一下 就行了
php73的用起来有啥问题不
没有
现在的版本是不是支持了unique啊
支持了吗
挺好用 感谢大佬
刚更新php版本就遇到了tp验证器问题,刚好在社区找到大佬插件
哈哈!那就好
大佬,语言支持嘛?
我想在语言包里直接翻译过来但是不触发多语言呢
暂不支持