让TP5 Validate支持二维数组验证

TP5 Validate 只支持一维数组的验证 , 没有像laravel 的那种二维验证.

修改 thinkphp/library/think/Validate.php 文件

protected function getDataValue($data, $key)
    {
        if (is_numeric($key)) {
            $value = $key;
        } elseif (strpos($key, '.')) {
            $arr = explode('.', $key);
            // 支持二维数组验证
            if (count($arr) > 2){
                list($name1,$name2,$name3) = $arr;
                //判断key是否存在
                if (!isset($data[$name1])){
                    return  null;
                }
                if ($name2 == '*'){
                    if (!isset($data[$name1]) || empty($data[$name1])){
                        return null;
                    }
                    foreach ($data[$name1] as $datum){
                        $value       = isset($datum[$name3]) ? $datum[$name3] : null;
                        if (!$value){
                            return  $value;
                        }
                    }
                }
            }else{
                list($name1,$name2) = $arr;
                $value               = isset($data[$name1][$name2]) ? $data[$name1][$name2] : null;
            }

        } else {
            $value = isset($data[$key]) ? $data[$key] : null;
        }
        return $value;
    }

控制器的使用

public function data()
    {
        $param = $this->request->param();
        $rule = [
            'data.*.name|名称' => 'require',
            'data.*.type|分类' => 'require',
        ];
        $validate = new Validate($rule);
        $result = $validate->check($param);
        if (!$result) {
            return message(403, [], $validate->getError());
        }
    }

接口请求数据


image.png

你可能感兴趣的:(让TP5 Validate支持二维数组验证)