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());
}
}
接口请求数据