mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 07:12:47 +08:00
validate类完善 controller和model类的validate方法支持传入提示信息 model类的validate方法支持指定验证器名
This commit is contained in:
@@ -145,10 +145,11 @@ class Controller
|
|||||||
* 验证数据
|
* 验证数据
|
||||||
* @access protected
|
* @access protected
|
||||||
* @param array $data 数据
|
* @param array $data 数据
|
||||||
* @param string $validate 验证器名
|
* @param string|array $validate 验证器名或者验证规则数组
|
||||||
|
* @param array $message 提示信息
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function validate($data, $validate)
|
public function validate($data, $validate, $message = [])
|
||||||
{
|
{
|
||||||
if (is_array($validate)) {
|
if (is_array($validate)) {
|
||||||
$v = Loader::validate();
|
$v = Loader::validate();
|
||||||
@@ -157,6 +158,10 @@ class Controller
|
|||||||
$v = Loader::validate($validate);
|
$v = Loader::validate($validate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_array($message)) {
|
||||||
|
$v->message($message);
|
||||||
|
}
|
||||||
|
|
||||||
if (!$v->check($data)) {
|
if (!$v->check($data)) {
|
||||||
return $v->getError();
|
return $v->getError();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -989,9 +989,12 @@ class Model
|
|||||||
protected function dataValidate(&$data)
|
protected function dataValidate(&$data)
|
||||||
{
|
{
|
||||||
if (!empty($this->options['validate'])) {
|
if (!empty($this->options['validate'])) {
|
||||||
$validate = Loader::validate($this->name);
|
$info = $this->options['validate'];
|
||||||
if (is_array($this->options['validate'])) {
|
$name = is_string($info) ? $info : $this->name;
|
||||||
$validate->rule($this->options['validate']);
|
$validate = Loader::validate($name);
|
||||||
|
if (is_array($info)) {
|
||||||
|
$validate->rule($info['rule']);
|
||||||
|
$validate->message($info['msg']);
|
||||||
}
|
}
|
||||||
if (!$validate->check($data)) {
|
if (!$validate->check($data)) {
|
||||||
$this->error = $validate->getError();
|
$this->error = $validate->getError();
|
||||||
@@ -1893,16 +1896,19 @@ class Model
|
|||||||
/**
|
/**
|
||||||
* 设置字段验证
|
* 设置字段验证
|
||||||
* @access public
|
* @access public
|
||||||
* @param mixed $field 字段名或者验证规则 true表示自动读取验证器类
|
* @param array|bool $rule 验证规则 true表示自动读取验证器类
|
||||||
* @param array|null $rule 验证规则
|
* @param array $msg 提示信息
|
||||||
* @return Model
|
* @return Model
|
||||||
*/
|
*/
|
||||||
public function validate($field = true, $rule = null)
|
public function validate($rule = true, $msg = null)
|
||||||
{
|
{
|
||||||
if (is_null($rule)) {
|
if (true === $rule) {
|
||||||
$this->options['validate'] = $field;
|
$this->options['validate'] = $this->name;
|
||||||
} else {
|
} elseif (is_array($rule)) {
|
||||||
$this->options['validate'][$field] = $rule;
|
$this->options['validate'] = [
|
||||||
|
'rule' => $rule,
|
||||||
|
'msg' => is_array($msg) ? $msg : [],
|
||||||
|
];
|
||||||
}
|
}
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,6 +187,8 @@ class Validate
|
|||||||
*/
|
*/
|
||||||
public function check(&$data, $rules = [], $scene = '')
|
public function check(&$data, $rules = [], $scene = '')
|
||||||
{
|
{
|
||||||
|
$this->error = [];
|
||||||
|
|
||||||
if (empty($rules)) {
|
if (empty($rules)) {
|
||||||
// 读取验证规则
|
// 读取验证规则
|
||||||
$rules = $this->rule;
|
$rules = $this->rule;
|
||||||
@@ -194,6 +196,12 @@ class Validate
|
|||||||
|
|
||||||
// 分析验证规则
|
// 分析验证规则
|
||||||
$scene = $this->getScene($scene);
|
$scene = $this->getScene($scene);
|
||||||
|
// 读取提示信息
|
||||||
|
if (isset($rules['__message__'])) {
|
||||||
|
$this->message($rules['__message__']);
|
||||||
|
unset($rules['__message__']);
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($rules as $key => $rule) {
|
foreach ($rules as $key => $rule) {
|
||||||
if (strpos($key, '|')) {
|
if (strpos($key, '|')) {
|
||||||
// 支持 字段|描述 用于返回默认错误
|
// 支持 字段|描述 用于返回默认错误
|
||||||
@@ -252,26 +260,30 @@ class Validate
|
|||||||
$result = call_user_func_array($rules, [$value, &$data]);
|
$result = call_user_func_array($rules, [$value, &$data]);
|
||||||
} else {
|
} else {
|
||||||
// 支持多规则验证 require|in:a,b,c|... 或者 ['require','in'=>'a,b,c',...]
|
// 支持多规则验证 require|in:a,b,c|... 或者 ['require','in'=>'a,b,c',...]
|
||||||
// [['require|in:a,b,c|...'],['错误信息1','错误信息2']]
|
|
||||||
if (is_string($rules)) {
|
if (is_string($rules)) {
|
||||||
$rules = explode('|', $rules);
|
$rules = explode('|', $rules);
|
||||||
}
|
}
|
||||||
$error = [];
|
$error = [];
|
||||||
foreach ($rules as $key => $rule) {
|
foreach ($rules as $key => $rule) {
|
||||||
// 判断验证类型
|
if ($rule instanceof \Closure) {
|
||||||
if (is_numeric($key) && strpos($rule, ':')) {
|
$result = call_user_func_array($rules, [$value, &$data]);
|
||||||
list($type, $rule) = explode(':', $rule, 2);
|
|
||||||
$info = $type;
|
|
||||||
} elseif (is_numeric($key)) {
|
|
||||||
$type = 'is';
|
|
||||||
$info = $rule;
|
|
||||||
} else {
|
} else {
|
||||||
$info = $type = $key;
|
// 判断验证类型
|
||||||
|
if (is_numeric($key) && strpos($rule, ':')) {
|
||||||
|
list($type, $rule) = explode(':', $rule, 2);
|
||||||
|
$info = $type;
|
||||||
|
} elseif (is_numeric($key)) {
|
||||||
|
$type = 'is';
|
||||||
|
$info = $rule;
|
||||||
|
} else {
|
||||||
|
$info = $type = $key;
|
||||||
|
}
|
||||||
|
// 验证类型
|
||||||
|
$callback = isset($this->type[$type]) ? $this->type[$type] : [$this, $type];
|
||||||
|
// 验证数据
|
||||||
|
$result = call_user_func_array($callback, [$value, $rule, &$data, $field]);
|
||||||
}
|
}
|
||||||
// 验证类型
|
|
||||||
$callback = isset($this->type[$type]) ? $this->type[$type] : [$this, $type];
|
|
||||||
// 验证数据
|
|
||||||
$result = call_user_func_array($callback, [$value, $rule, &$data, $field]);
|
|
||||||
if (false === $result) {
|
if (false === $result) {
|
||||||
// 验证失败 返回错误信息
|
// 验证失败 返回错误信息
|
||||||
if (isset($this->message[$field . '.' . $info])) {
|
if (isset($this->message[$field . '.' . $info])) {
|
||||||
|
|||||||
Reference in New Issue
Block a user