ufutx.dma/app/Validators/BaseValidator.php
2026-03-04 14:42:40 +08:00

126 lines
2.7 KiB
PHP

<?php
namespace App\Validators;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
/**
* 扩展验证器
*/
class BaseValidator {
/**
* 当前验证规则
* @var array
*/
protected $rule = [];
/**
* 验证提示信息
* @var array
*/
protected $message = [];
/**
* 验证场景定义
* @var array
*/
protected $scene = [];
/**
* 设置当前验证场景
* @var array
*/
protected $currentScene = null;
/**
* 验证失败错误信息
* @var array
*/
protected $error = [];
/**
* 场景需要验证的规则
* @var array
*/
protected $only = [];
/**
* 设置验证场景
* @access public
* @param string $name 场景名
* @return $this
*/
public function scene($name)
{
// 设置当前场景
$this->currentScene = $name;
return $this;
}
/**
* 数据验证
* @access public
* @param array $data 数据
* @param mixed $rules 验证规则
* @param array $message 自定义验证信息
* @param string $scene 验证场景
* @return array
* @throws ValidationException
*/
public function validate($data, $rules = [], $message = [],$scene = '')
{
$this->error =[];
if (empty($rules)) {
//读取验证规则
$rules = $this->rule;
}
if (empty($message)) {
$message = $this->message;
}
//读取场景
$this->getScene($scene);
//如果场景需要验证的规则不为空
if (!empty($this->only)) {
$new_rules = [];
foreach ($this->only as $key => $value) {
if (array_key_exists($value,$rules)) {
$new_rules[$value] = $rules[$value];
}
}
$rules = $new_rules;
}
return Validator::make($data,$rules,$message)->validate();
}
/**
* 获取数据验证的场景
* @access protected
* @param string $scene 验证场景
*/
protected function getScene($scene = '')
{
if (empty($scene)) {
// 读取指定场景
$scene = $this->currentScene;
}
$this->only = [];
if (!isset($this->scene[$scene])) {
//指定场景未找到写入error
throw new \Exception("scene:".$scene.'is not found');
}
// 如果设置了验证适用场景
$scene = $this->scene[$scene];
if (is_string($scene)) {
$scene = explode(',', $scene);
}
//将场景需要验证的字段填充入only
$this->only = $scene;
}
}