think\Validate::check PHP Method

check() public method

数据自动验证
public check ( array $data, mixed $rules = [], string $scene = '' ) : boolean
$data array 数据
$rules mixed 验证规则
$scene string 验证场景
return boolean
    public function check($data, $rules = [], $scene = '')
    {
        $this->error = [];
        if (empty($rules)) {
            // 读取验证规则
            $rules = $this->rule;
        }
        // 分析验证规则
        $scene = $this->getScene($scene);
        if (is_array($scene)) {
            // 处理场景验证字段
            $change = [];
            $array = [];
            foreach ($scene as $k => $val) {
                if (is_numeric($k)) {
                    $array[] = $val;
                } else {
                    $array[] = $k;
                    $change[$k] = $val;
                }
            }
        }
        foreach ($rules as $key => $item) {
            // field => rule1|rule2... field=>['rule1','rule2',...]
            if (is_numeric($key)) {
                // [field,rule1|rule2,msg1|msg2]
                $key = $item[0];
                $rule = $item[1];
                if (isset($item[2])) {
                    $msg = is_string($item[2]) ? explode('|', $item[2]) : $item[2];
                } else {
                    $msg = [];
                }
            } else {
                $rule = $item;
                $msg = [];
            }
            if (strpos($key, '|')) {
                // 字段|描述 用于指定属性名称
                list($key, $title) = explode('|', $key);
            } else {
                $title = $key;
            }
            // 场景检测
            if (!empty($scene)) {
                if ($scene instanceof \Closure && !call_user_func_array($scene, [$key, $data])) {
                    continue;
                } elseif (is_array($scene)) {
                    if (!in_array($key, $array)) {
                        continue;
                    } elseif (isset($change[$key])) {
                        // 重载某个验证规则
                        $rule = $change[$key];
                    }
                }
            }
            // 获取数据 支持二维数组
            $value = $this->getDataValue($data, $key);
            // 字段验证
            $result = $this->checkItem($key, $value, $rule, $data, $title, $msg);
            if (true !== $result) {
                // 没有返回true 则表示验证失败
                if (!empty($this->batch)) {
                    // 批量验证
                    if (is_array($result)) {
                        $this->error = array_merge($this->error, $result);
                    } else {
                        $this->error[$key] = $result;
                    }
                } else {
                    $this->error = $result;
                    return false;
                }
            }
        }
        return !empty($this->error) ? false : true;
    }

Usage Example

Exemplo n.º 1
0
 public function testScene()
 {
     $rule = ['name' => 'require|max:25', 'age' => 'number|between:1,120', 'email' => 'email'];
     $msg = ['name.require' => '名称必须', 'name.max' => '名称最多不能超过25个字符', 'age.number' => '年龄必须是数字', 'age.between' => '年龄只能在1-120之间', 'email' => '邮箱格式错误'];
     $data = ['name' => 'thinkphp', 'age' => 10, 'email' => '*****@*****.**'];
     $validate = new Validate($rule);
     $validate->scene('edit', ['name', 'age']);
     $validate->scene('edit');
     $result = $validate->check($data);
     $this->assertEquals(true, $result);
 }
All Usage Examples Of think\Validate::check