增加TP5验证数组结构功能!!

浏览:718 发布日期:2019/10/25 分类:ThinkPHP5专区 关键字:
定义一个验证器
class User entends Validate
{
protected $rule = [
'test' => 'checkArray:{"name":"string","year":"interval"}'
];

}



class Validate extends \think\Validate
{

/**
* 验证无序数组
*
* @param array $value 需要验证的数据 例: ["name"=>"李四","year"=>30];
* @param string $role 规则 例: {"name":"string","year":"interval"}
* @param array $data 所有参数
* @return string|true
* @author
*/
public function checkArray(array $value, string $role, array $data)
{
$role = json_decode($role, true);

//将数组键值转换成类型
$data_type = $this->arrayValueToType($value);

//判断数组是否相等
if ($data_type === $role) {
return true;
} else {
return '类型错误';
}
}

/**
* 验证有序数组
*
* @param array $value 需要验证的数据 例: [["name"=>"李四","year"=>30],["name"=>"张三","year"=>28]];
* @param string $role 规则 例: {"name":"string","year":"interval"}
* @param array $data 所有参数
* @return string|true
* @author
*/
public function checkListArray(array $value, string $role, array $data)
{
$role = json_decode($role, true);

foreach ($value as $v) {
//将数组键值转换成类型
$data_type = $this->arrayValueToType($v);

//判断数组是否相等
if ($data_type === $role) {
return true;
} else {
return '类型错误';
}
}
}

/**
* 将数组的键值转为类型名称
*
* @param array $data 要验证的数组
* @return array
* @author
*/
private function arrayValueToType(array $data): array
{
foreach ($data as &$v) {
if (is_array($v)) {
$v = $this->arrayValueToType($v);
} else {
$v = gettype($v);
}
}
unset($v);

return $data;
}

}





最佳答案
评论( 相关
后面还有条评论,点击查看>>