hehex / hehep-hvalidation
hehep-hvalidation 是一个PHP验证器基础组件
v1.0.0
2024-09-09 01:05 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2024-09-09 02:07:27 UTC
README
介绍
- hehep-hvalidation 是一个PHP验证器工具组件
- 支持多个验证器
- 支持验证多个属性
- 支持验证多维数组
- 直接使用验证器验证
- 支持与或或、与、与和、或运算
- 支持单独设置验证规则错误消息
- 支持验证规则使用场景
- 支持设置验证规则的前置条件
- 支持添加自定义验证器
- 支持验证器直接为方法或函数
- 支持自定义错误码
安装
- gitee下载:
git clone git@gitee.com:chinahehex/hehep-hvalidation.git
- github下载:
git clone git@github.com:chinahehex/hehep-hvalidation.git
- 命令安装:
composer require hehex/hehep-hvalidation
组件配置
验证规则:
['验证名称',[['验证器1','验证器1属性1'=>'','验证器1属性2'=>''],['验证器2','验证器2属性1'=>'','验证器2属性2'=>''] ],'验证规则属性1'=>'','验证规则属性2'=>''],
// 验证器参数 $validatorConf= [ "message"=>"你输入的格式错误!",// 错误消息, "err_code"=>null,// 错误码,非必填 "skipOnEmpty"=>true,// 当验证值为空时是否调用验证,true 表示值为空时不验证,false 表示值为空时继续验证 ]; // 验证规则参数 $ruleConf = [ "goon"=>false,// 当验证失败后,是否继续其他验证 "message"=>"你输入的格式错误!",// 错误消息 "err_code"=>null,// 错误码,非必填 "on"=>"create",// 使用场景 "when"=>'valint(方法或函数)',// 满足条件,规则才有效 ];
基本示例
- 快速使用
use hehe\core\hvalidation\Validation; $hvalidation = new Validation(); // 校验数据 $data = [ 'name'=>"hehe",// 用户姓名 'age'=>2,// 年龄 'userType'=>1,// 用户类型 'tel'=>'138xxxxxxxxx',// 联系方式 ]; // 校验规则 $rules = [ ['name',[['required']],'message'=>'很多的'], ['age',[['required'],['number','message'=>'年龄必须为数字','err_code'=>-1]],'message'=>'请输入的年龄格式错误!','err_code'=>-2], ['userType',[['required'],['inlist','numbers'=>[1,2,3,4]]],'message'=>'用户类型的值必须为1,2,3,4!'], ['tel',['or',['phone'],['mobile']],'message'=>'请输入手机号或固定电话'], ]; $validationResult = $hvalidation->validate($rules,$data); if (!$validationResult->getResult()) { var_dump("校验失败"); // 获取首个验证器错误消息 var_dump($validationResult->getFirstError()); var_dump($validationResult->getFirstCode()); } else { var_dump("校验成功"); } // 验证是否手机 Validation::tel('135xxxxxxx'); // 验证是否ip Validation::ip('135xxxxxxx');
- 多个验证器,支持与或或、与、与和、或运算
$rules = [ ['attr1',[['required'],['minlen','min'=>10,'max'=>20]],'message'=>'请输入一个10-20位的字符串'], ['attr1',['or',['boolean'],['minlen','min'=>10,'max'=>20]],'message'=>'请输入一个10-20位的字符串或布尔型'], ] $rules = [ ['attr1',['&' [['验证器1']],['or',[['验证器2']],[['验证器3']]] ],'message'=>'多验证器,或'], ]
- 验证多个属性(不建议这样使用)
$rules = [ ['attr1,attr2',[['!empty']],'message'=>'参数不能为空'], ]
- 验证多维数组
//@todo
- 设置验证规则错误消息
$rules = [ ['attr1',[['required'],['minlen','min'=>10,'max'=>20]],'message'=>'请输入一个10-20位的字符串'] ]
- 设置验证器错误消息
$rules = [ ['attr1',[['required'],['minlen','min'=>10,'max'=>20,'message'=>'请输入一个10-20位的字符串']],'message'=>'不能为空'] ]
- 设置验证规则使用场景
// on=add 用于添加规则 $rules = [ ['attr1',[['required'],['minlen','min'=>10,'max'=>20]],'message'=>'请输入一个10-20位的字符串','on'=>'add'] ]
- 设置验证规则的前置条件
/** * @param $rule 当前规则对象 * @param $attrs 传入的所有数据 */ function whencon($rule,$attrs) { return true; } $rules = [ ['attr1',[['required'],['minlen','min'=>10,'max'=>20]],'message'=>'请输入一个10-20位的字符串','when'=>'whencon'] ]; $rules = [ ['attr1',[['required'],['minlen','min'=>10,'max'=>20]],'message'=>'请输入一个10-20位的字符串','when'=>[$this,'wwhen']] ];
- 添加自定义验证器
use hehe\core\hvalidation\Validation; $hvalidation = new Validation(); $validation->addValidator('自定义验证器别名','hehe\\core\\validate\\BooleanValidate','自定义消息内容');
- 验证器直接为方法或函数
$rules = [ ['attr1',[ [[$this,'func1'] ] ],'message'=>'请输入一个10-20位的字符串'] ];
- 验证器直接为闭包
$rules = [ ['attr1',[ [function($val,CallValidator $validator){ // 验证结果 true or false // 定义的其他参数 $validator->params; } ] ],'message'=>'请输入一个10-20位的字符串'] ];
- 直接使用验证器验证
use hehe\core\hvalidation\Validation; $result = Validation::number('12',['name'=>23232]); // result : true or false
- 直接实例化验证类,调用验证类方法
use hehe\core\hvalidation\Validation; $validation = new Validation(); $validate = $validation->createValidator('range',['min'=>10,'max'=>20]); $result = $validate->validate(20); // result : true or false
- 注解注册验证规则
use hehe\core\hvalidation\annotation\RequiredValid; use hehe\core\hvalidation\annotation\RangeLengthValid; use hehe\core\hvalidation\annotation\EgtValid; class IndexController { /** * @var string * @RequiredValid("不能为空") * @RangeLengthValid(min=10,max=20) */ public $name; /** * @var string * @RequiredValid("不能为空") * @EgtValid(number=10) */ public $age; }
扩展验证器
- 操作步骤如下
步骤1. 创建自定义验证器集合类
/** * 自定义验证器 * Class CommonValidators * @package common\extend\validators */ class CommonValidators { // 定义 public static function install() { return [ 'tel'=>['class'=>'common\extend\validators\TelValidators'], // 静态方法调用 'ip'=>['class'=>'CallValidator','func'=>'common\extend\validators\CommonValidators@@ip'], // 对象方法调用 'ip6'=>['class'=>'CallValidator','func'=>'common\extend\validators\CommonValidators@ip6'], //'ip'=>['class'=>'CallValidator','func'=>[static::class,'ip']], ]; } public static function ip($value) { $valid = preg_match('/^(\d+\.\d+\.\d+\.\d+)$/', $value); return $valid === 1; } public function ip6($value) { $valid = preg_match('/^(\d+\.\d+\.\d+\.\d+)$/', $value); return $valid === 1; } }
步骤2. 创建手机号码验证器类
namespace common\extend\validators; use hehe\core\hvalidation\base\Validator; class TelValidator extends Validator { public static function install() { return [ 'tel'=>['class'=>static::class,'其他规则'=>'xxxx'], ]; } protected $pattern = '/^1[0-9]{10}$/'; protected function validateValue($value,$name = null) { $valid = preg_match($this->pattern, $value); return $valid === 1; } }
步骤3. 验证器类组件配置
// 创建Validation 对象后,自动加载CommonValidators 类定义的验证规则 $hvalidation = new Validation([ 'customValidators'=>[ 'common\extend\validators\CommonValidators',// 需安装的验证器集合类 [dirname(__FILE__),'\common\extend\validators'] // ['安装的目录','目录对应的命名空间'] ] ]); // 安装的方式 Validation::install('common\extend\validators\CommonValidators');
安装验证器
- 指定验证器安装
Validation::install('common\extend\validators\CommonValidators');
- 指定验证器类同目录下所有验证器安装
Validation::install('common\extend\validators\CommonValidators',true);
- 指定验证器类同级目录及其子目录下所有验证器
Validation::install('common\extend\validators\CommonValidators',true,true);
- 安装指定后缀的验证器(默认前缀validator)
Validation::install('common\extend\validators\CommonValidators',true,false,'validators');
- 指定目录安装(目录下所有验证器都会安装)
// 目录下所有验证器都会被安装 Validation::install([ dirname(__FILE__),// 安装的目录 '\common\extend\validators',目录对应的命名空间 ]);
注解验证
- 定义被验证类
namespace hvalidation\tests\common; use hehe\core\hvalidation\annotation\RequiredValid; use hehe\core\hvalidation\annotation\NumberValid; use hehe\core\hvalidation\annotation\InlistValid; use hehe\core\hvalidation\annotation\Validator; use hehe\core\hvalidation\annotation\MobileValid; class UserController { /** * @RequiredValid("姓名不能为空") * @var string */ public $name; /** * @RequiredValid("请填写年龄") * @NumberValid("请输入的年龄格式错误") * @var string */ public $age; /** * @RequiredValid("请选择用户类型") * @InlistValid("用户类型的值必须为1,2,3,4!",numbers="1,2,3,4") * @var string */ public $userType; /** * @MobileValid("手机号码",numbers="1,2,3,4") * @var string */ public $tel; /** * @RequiredValid(message="姓名不能为空",name="name") * @RequiredValid("姓名不能为空",name="age") * @NumberValid("请输入的年龄格式错误",name="age") * @RequiredValid("请选择用户类型",name="userType") * @InlistValid("用户类型的值必须为1,2,3,4!",name="userType",numbers={1,2,3,4}) * @Validator("手机号码",name="tel",validator={"or",{"mobile"},{"phone"}}) */ public function add(){} /** * @RequiredValid("姓名不能为空",name="name") * @RequiredValid("姓名不能为空",name="age") * @NumberValid("请输入的年龄格式错误",name="age") * @RequiredValid("请选择用户类型",name="userType") */ #[InlistValid(message:"用户类型的值必须为1,2,3,4!",name:"userType",numbers:"1,2,3,4")] #[Validator("联系电话错误",name:"tel",validator:array('or',array('mobile'),array('phone')))] public function add1(){} }
- 验证示例
use hehe\core\hvalidation\Validation; // 验证数据 $data = [ 'name'=>"hehe",// 用户姓名 'age'=>2,// 年龄 'userType'=>4,// 用户类型 'tel'=>'13811111111',// 联系方式 ]; $hvalidation = new Validation(); // 获取UserController 类属性的验证规则 $rules = Validation::getRule(UserController::class); $rules = $hvalidation->getClassRule(UserController::class); // 获取UserController类add方法的验证规则 $rules = $hvalidation->getMethodRule(UserController::class,'add'); $rules = Validation::getRule(UserController::class . '@add'); $validationResult = $hvalidation->validate($rules,$data);