houde_web_api/app/common.php
2023-04-16 23:05:17 +08:00

179 lines
5.0 KiB
PHP

<?php
// 应用公共文件
use app\common\arw\adjfut\src\Exception\ErrorMsg;
use app\BaseController;
use think\facade\Request;
use think\facade\Validate;
use think\Collection;
use think\db\Query;
use think\Validate as ThinkValidate;
const DS = DIRECTORY_SEPARATOR;
function fump($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE)
{
$label = (null === $label) ? '' : rtrim($label) . ':';
ob_start();
var_dump($var);
$output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', ob_get_clean());
if (!extension_loaded('xdebug')) {
$output = htmlspecialchars($output, $flags);
}
$output = '<pre>' . $label . $output . '</pre>';
if ($echo) {
echo ($output);
return;
}
return $output;
}
/**
* 抛出业务异常
*
* @param string $msg
* @param integer $code
* @return void
* @throws ErrorMsg
* @date 2022-12-27
* @example
* @author admin
* @since 1.0.0
*/
function throwErrorMsg(string $msg, int $code = 1): void
{
throw new ErrorMsg($msg, $code);
}
/**
* 计算年龄
*
* @param string $birthday Y-m-d
* @return int
* @date 2022-03-11
* @example
* @author admin
* @since 1.0.0
*/
function sumAge($birthday): int
{
$age = 0;
try {
if (!is_string($birthday)) {
throw new ErrorMsg("非法日期", 1);
}
$birthday = explode("-", date('Y-m-d', strtotime($birthday)));
$date = explode("-", date('Y-m-d'));
if (count($birthday) === 3) {
list($y, $m, $d) = $birthday;
} else {
list($y, $m, $d) = $date;
}
// list($y, $m, $d) = $birthday;
list($dy, $dm, $dd) = $date;
$age = $dy - $y;
if ($dm >= $m) {
if ($dm == $m) {
if ($dd >= $d) {
} else {
$age--;
}
}
} else {
$age--;
}
return $age;
} catch (\Throwable $th) {
}
return $age;
}
Validate::maker(function (ThinkValidate $validate) {
$validate->extend(
'string',
function ($value) {
return is_string($value);
},
':attribute 数据类型非法 不是字符串'
);
});
/**
* 接口返回封装
*/
function msg(...$arr)
{
$msg_data = ['code' => 0];
$default_code_msg = [0 => '操作成功!', 1 => '操作失败!'];
//data数据构建
function constructData(&$msg_data, $code, $msg_str, &$arr2)
{
$msg_data['code'] = $code;
$msg_data['msg'] = $msg_str;
if (is_array($arr2)) { //数组
$msg_data['data'] = $arr2;
}
if (is_object($arr2)) { //查询对象
$obj = $arr2;
$soft_delete_field = '_delete_time'; //软删除默认后缀
//模型层 || Db层
if ($obj instanceof think\db\Query || $obj instanceof think\Collection) {
//join软删除字段过滤补全(暂时只适应软删除为 【前缀名_delete_time】存储为datetime 的设计)
if (isset($obj->getOptions()['join']) && $join_data = $obj->getOptions('join')) {
$join_soft_delete = [];
foreach ($join_data as $key => $join) {
$join_table_name = is_array($join[0]) ? array_keys($join[0])[0] : $join[0]; //联表表名
$join_soft_delete[] = [$join_table_name . $soft_delete_field, 'NULL', null];
}
$obj = $obj->where($join_soft_delete);
}
//select()、count()补全
$msg_data['data'] = $obj->page((int) Request::param('page', 1), (int) Request::param('limit', 10))->select();
$msg_data['count'] = $obj->count();
} else {
return ['code' => 444, 'msg' => '对象只允许传递来自think\db\Query类和instanceof think\Collection类的实例!'];
}
}
};
switch (count($arr)) {
case 1: //单参数
constructData($msg_data, 0, '查询成功!', $arr[0],);
if (is_string($arr[0])) $msg_data['msg'] = $arr[0];
if (is_int($arr[0])) {
$msg_data['code'] = $arr[0];
$msg_data['msg'] = $default_code_msg[$arr[0]];
}
break;
case 2: //双参数
if (is_int($arr[0]) && is_string($arr[1])) {
$msg_data['code'] = $arr[0];
$msg_data['msg'] = $arr[1];
} else {
constructData($msg_data, 0, $arr[0], $arr[1]);
}
break;
case 3: //三参数
$msg_data['code'] = $arr[0];
$msg_data['msg'] = $arr[1];
if (is_object($arr[2])) {
$msg_data['data'] = $arr[2];
} else {
foreach ($arr[2] as $key => $val)
$msg_data[$key] = $val;
}
break;
default:
return ['code' => 444, 'msg' => 'msg()最多参数只允许3个!'];
}
return $msg_data;
}