Files
yuyin-php/extend/RongCloud/Lib/Utils.php

345 lines
9.3 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* 工具类
*/
namespace RongCloud\Lib;
class Utils
{
/**
* 数字长度是否匹配
* @param $params
* @return bool
*/
public function isLength($params)
{
$val = $params['val'];
$min = isset($params['min']) ? $params['min'] : 0;
$len = !is_array($val) ? strlen($val) : count($val);
$max = isset($params['max']) ? $params['max'] : 0;
$isLen = false;
if ($len < $min || $len > $max) {
$isLen = true;
}
return $isLen;
}
/**
* 重命名
* @param $obj
* @param array $array
* @return mixed
*/
public function rename($obj, $array = [])
{
foreach ($array as $key => $v) {
if (isset($obj[$key])) {
$obj[$v] = isset($obj[$key]) ? $obj[$key] : "";
unset($obj[$key]);
}
}
return $obj;
}
/**
* 模板替换
* @param $temp
* @param $data
* @return mixed
*/
public function tplEngine($temp, $data)
{
foreach ($data as $k => $v) {
$v = is_array($v) || is_object($v) ? "object" : $v;
$temp = str_replace("{{{$k}}}", $v, $temp);
}
return $temp;
}
/**
* 获取错误信息
* @param $params
* @return array|mixed
*/
public function getError($params)
{
$code = $params['code'];
$errorInfo = [];
if (is_array($code)) {
$errorInfo = $this->rename($code, ['errorMessage' => 'msg']);
$code = $errorInfo['code'];
}
$errors = $params['errors'];
$info = isset($params['info']) ? $params['info'] : [];
$error = isset($errors[$code]) ? $errors[$code] : [];
if (!$error) {
$error = $errorInfo;
}
if (isset($error['msg'])) {
$error['msg'] = $code ? $this->tplEngine($error['msg'], $info) : $errorInfo['msg'];
}
return $error;
}
/**
* 参数长度验证
* @param $params
* @return array|mixed|null
*/
public function checkLength($params)
{
$proto = $params['proto'];
$verify = ($params['verify'][$proto]['length']);
$val = $params['val'];
$errors = $params['response'];
$isLen = $this->isLength([
'max' => $verify['max'],
'min' => $verify['min'],
'val' => $val
]);
$error = null;
if ($isLen) {
$error = $this->getError([
'code' => $verify['invalid'],
'errors' => $errors,
'info' => [
'name' => $proto,
'max' => $verify['max'],
'min' => $verify['min'],
'len' => substr($val, 0, $verify['max'])
]
]);
}
return $error;
}
/**
* 参数类型验证
* @param $params
* @return array|int|mixed
*/
public function checkTypeof($params)
{
$error = 0;
$proto = $params['proto'];
$verify = ($params['verify'][$proto]['typeof']);
$val = $params['val'];
$errors = $params['response'];
$isFalse = 0;
if ($verify['type'] == "array" && !is_array($val)) {
$isFalse = 1;
}
if ($verify['type'] == "number" && !is_numeric($val)) {
$isFalse = 1;
}
if ($isFalse) {
$error = $this->getError([
'code' => $verify['invalid'],
'errors' => $errors,
'info' => [
'currentType' => gettype($val),
'name' => $proto,
'type' => $verify['type']
]
]);
}
return $error;
}
/**
* 参数验证
* @param $params
* @return null
*/
public function check($params)
{
$error = null;
$model = $params['model'];
$api = $params['api'];
$errors = $api['response']['fail'];
$dataModel = $api['params'][$model];
$data = isset($params['data']) ? $params['data'] : [];
$verify = $params['verify'];
$checkMap = [
'length' => 'checkLength',
'require' => 'checkRequire',
'typeof' => 'checkTypeof',
'size' => 'checkSize'
];
$isBreak = false;
foreach ($dataModel as $proto => $val) {
if ($isBreak) {
break;
}
$protoVerify = isset($verify[$proto]) ? $verify[$proto] : "";
if ($protoVerify) {
foreach ($protoVerify as $rule => $ruleVal) {
$fun = $checkMap[$rule];
$error = $this->$fun([
'verify' => $verify,
'proto' => $proto,
'val' => isset($data[$proto]) ? $data[$proto] : "",
'response' => $errors
]);
if ($error) {
// var_dump($errors,$fun,$verify,$data,$proto);
$isBreak = true;
break;
}
}
}
}
return $error;
}
/**
* 参数大小验证
* @param $params
* @return array|mixed|null
*/
function checkSize($params)
{
$error = null;
$proto = $params['proto'];
$verify = $params['verify'][$proto]['size'];
$size = $params['val'];
if (is_array($params['val'])) {
$size = count($params['val']);
}
if (is_string($params['val'])) {
$size = strlen($params['val']);
}
$errors = $params['response'];
$isIllegal = ($size < $verify['min'] || $size > $verify['max']);
if ($isIllegal) {
$error = $this->getError([
'code' => $verify['invalid'],
'errors' => $errors,
'info' => [
'size' => $size
]
]);
}
return $error;
}
/**
* 参数 必填验证
* @param $params
* @return array|mixed|null
*/
function checkRequire($params)
{
$error = null;
$proto = $params['proto'];
$verify = $params['verify'][$proto]['require'];
$errors = $params['response'];
$isIllegal = empty($params['val']) ? 1 : 0;
if (is_array($params['val'])) {
$isIllegal = empty($params['val']) ? 1 : 0;
} else {
$isIllegal = trim($params['val']) == '' ? 1 : 0;
}
if ($isIllegal) {
$error = $this->getError([
'code' => $verify['invalid'],
'errors' => $errors,
'info' => [
'name' => $proto
]
]);
}
return $error;
}
/**
* json 数据获取
* @param string $path
* @return mixed
*/
public static function getJson($path = "")
{
$files = file_get_contents(RONGCLOUOD_ROOT . $path);
return json_decode($files, true);
}
/**
* 变量友好化打印输出
* @param variable $param 可变参数
* @example dump($a,$b,$c,$e,[.1]) 支持多变量,使用英文逗号符号分隔,默认方式 print_r查看数据类型传入 .1
* @version php>=5.6
* @return void
*/
public static function dump()
{
$param = func_get_args();
echo '<style>.php-print{background:#eee;padding:10px;border-radius:4px;border:1px solid #ccc;line-height:1.5;white-space:pre-wrap;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:13px;}</style>', '<pre class="php-print">';
if (end($param) === .1) {
array_splice($param, -1, 1);
foreach ($param as $k => $v) {
echo $k > 0 ? '<hr>' : '';
ob_start();
Utils::dump($v);
echo preg_replace('/]=>\s+/', '] => <label>', ob_get_clean());
}
} else {
foreach ($param as $k => $v) {
echo $k > 0 ? '<hr>' : '', print_r($v, true);
}
}
echo '</pre>';
}
/**
* 错误信息重置
*
* @param array $result 结果信息
* @param array $failList 错误信息列表
* @return array
*/
public function responseError($result = array(), $failList = array())
{
if (!is_array($result)) {
$result = json_decode($result, true);
}
if (isset($result['code']) && $result['code'] != 200) {
unset($result['url']);
if ($result['code'] == 1002) {
unset($failList[1002]);
}
$result['code'] = $result;
$result['errors'] = $failList;
$result = $this->getError($result);
return $result;
} else {
return $result;
}
}
/**
* 生成一个指定长度随机字符串
* @param int $len
* @return string
*/
public static function createRand($len = 6)
{
$string = 'abcdefghijklmnopqrstuvwxyz0123456789';
$result = '';
$string = str_shuffle($string);
for ($i = 0; $i < $len; $i++) {
$result .= $string[mt_rand(0, strlen($string) - 1)];
}
return $result;
}
}