内置工具
搜索器
注意
搜索器只能在Service
层使用
// 定义搜索
self::setSearch([
'%like%' => ['title'], // 模糊搜素
'=' => ['status@is_show'], // 等于条件
'datetime' => ['datetime@create_time'], // 按时间访问搜索
]);
// 参数说明
'=' => ['status@is_show']
键:搜索条件, 此处的意思是status参数等于什么
值: 是一个数组,它是您前端传递过来的参数名称,可是多个
问: 那这里的`@`符号又是什么意思?
左边: 即`status`代表前端传递的参数字段名称。
右边: 即`is_show`对应查询数据库的is_show字段。
说明: 因为前端字段可能与数据库不一致,所以要这样写,如果一致可以忽略右边部分。
// 使用搜索
// 光是定义搜索条件是不生效的,这时候需要你指定到哪里去使用,如下:
$model = new Article();
$lists = $model
->withoutField('is_delete,delete_time')
->where(self::$searchWhere) // 此处的`self::$searchWhere`就是条件数组
->select()->toArray();
// between的用法
// url参数示例: https://www.waitadmin.cn/article?start_time=1&end_time=2
// create_time是数据库的字段
// 最终生成的条件: ['create_time', 'between', [1, 2]]
self::setSearch([
'between' => ['start_time|end_time@create_time']
]);
// 搜索条件
=
<>
>
>=
<
<=
in
%like%
%like
like%
between
datetime
keyword
路径转换
/**
* 转绝对路径
* 示例:
* 转换前: image/20220819/ad06320.jpeg
* 转换后: http://www.waitadmin.cn/storage/image/20220819/ad06320.jpeg
*
* @param string $url (相对路径)
* @return string (绝对路径)
*/
UrlUtils::toAbsoluteUrl(string $url);
/**
* 转相对路径
* 示例:
* 转换前: http://www.waitadmin.cn/storage/image/20220819/ad06320.jpeg
* 转换后: image/20220819/ad06320.jpeg
*
* @param string $url (绝对路径)
* @return string (相对路径)
*/
UrlUtils::toRelativeUrl(string $url);
/**
* 转本地根路径
* 示例:
* 转换前: storage/image/20220819/ad06320.jpeg
* 转换后: /www/server/wait/public/storage/image/20220819/ad06320.jpeg
*
* @param string $url (相对路径)
* @return string (绝对根路径)
*/
UrlUtils::toRoot(string $url);
时间工具
// 返回今日开始和结束的时间戳
TimeUtils::today();
// 返回明天开始和结束时间戳
TimeUtils::tomorrow();
// 返回昨日开始和结束的时间戳
TimeUtils::yesterday();
// 返回本周开始和结束的时间戳
TimeUtils::week();
// 返回上周开始和结束的时间戳
TimeUtils::lastWeek();
// 返回本月开始和结束的时间戳
TimeUtils::month();
// 返回上个月开始和结束的时间戳
TimeUtils::lastMonth();
// 返回今年开始和结束的时间戳
TimeUtils::year();
// 返回去年开始和结束的时间戳
TimeUtils::lastYear();
// 获取几天前零点到现在/昨日结束的时间戳
// 参数: [$day=天数, $now=返回现在或者昨天结束时间戳]
TimeUtils::dayToNow(int $day = 1, bool $now = true);
// 返回几天前的时间戳
TimeUtils::daysAgo(int $day = 1);
// 返回几天后的时间戳
TimeUtils::daysAfter(int $day = 1);
// 天数转换成秒数
TimeUtils::daysToSecond(int $day = 1);
// 周数转换成秒数
TimeUtils::weekToSecond(int $week = 1);
// 最近N天的日期
TimeUtils::nearToDate(int $day = 7);
// 当前毫秒数
TimeUtils::millisecond();
// 返回今天是周几
TimeUtils::dayWeek();
// 大写月份
TimeUtils::capMonth(int $month = 0);
// 格式化时间戳 (显示天时分)
TimeUtils::formatTime(int $time);
压缩工具
/**
* 压缩
*
* @param string $source (压缩的目录)
* @param string $target (保存的路径)
* @throws Exception
* @return void
*/
ZipUtils::zip(string $source, string $target);
/**
* 解压
*
* @param string $zipFile (压缩包路径)
* @param string $folderPath (解压的目录)
* @return string (解压后路径)
* @throws Exception
*/
ZipUtils::unzip(string $source, string $target);
文件工具
/**
* 创建目录
*
* @param string $dir (目录路径)
* @param int $permissions (创建权限)
* @param bool $recursive (递归创建)
* @return void
*/
FileUtils::mkdir(string $dir, int $permissions = 0777, bool $recursive = true);
/**
* 删除目录
*
* @param string $dir (目录路径)
* @return bool (true=成功, false=失败)
*/
FileUtils::rmdir(string $dir);
/**
* 拷贝文件到指定目录
*
* @param string $source (原始路径)
* @param string $target (目录路径)
* @param bool $isDelete (是否删除原文件)
* @return void
*/
FileUtils::copy(string $source, string $target, bool $isDelete = false);
/**
* 移动文件到指定目录
*
* @param string $source (原始路径)
* @param string $target (目录路径)
* @return void
*/
FileUtils::move(string $source, string $target);
/**
* 获取目录的大小
*
* @param string $dir (目录)
* @return int (大小字节)
*/
FileUtils::getDirSize(string $dir);
/**
* 获取文件的大小
*
* @param string $path (路径)
* @return int (大小字节)
*/
FileUtils::getFileSize(string $path);
/**
* 获取文件的名称
*
* @param string $path (路径)
* @return string (文件名称: 如: aa.png)
*/
FileUtils::getFileName(string $path);
/**
* 获取文件扩展名
*
* @param string $path (路径)
* @return string (扩展名,如: .png)
*/
FileUtils::getFileExt(string $path);
/**
* 获取文件的列表
*
* @param string $path (路径)
* @param string $type (类型)
* @return array (列表)
*/
FileUtils::getFileList(string $path, string $type='');
/**
* 验证是否有写入权限
*
* @param string $dir (目录)
* @return bool (true=有权限, false=无权限)
*/
FileUtils::isWritable(string $dir);
配置工具
/**
* 配置设置
*
* @param string $type (类型)
* @param string $key (键名)
* @param mixed $value (键值)
* @param string $remarks (备注)
*/
ConfigUtils::set(string $type, string $key, $value, string $remarks='');
/**
* 配置读取
*
* @param string $type (类型)
* @param string $key (键名)
* @param $default (默认)
* @return mixed (数组/字符/数值)
*/
ConfigUtils::get(string $type, string $key='', $default=null);
数组工具
/**
* 转树形HTML结构数据
*
* @param $data (数据集)
* @param int $pid (父级ID)
* @param string $field (父级字段名)
* @param string $pk (主键)
* @param string $html (层级文本标识)
* @param int $level (当前所在层级)
* @param bool $clear (是否清空)
* @return array
*/
ArrayUtils::toTreeHtml($data, $pid=0, $field='pid', $pk='id', $html='|--', $level=0, $clear=true);
/**
* 转树形JSON格式数据
*
* @param array $data (数据集)
* @param int $pid (父级ID)
* @param string $field (字段名称)
* @param string $pk (主键)
* @return array
*/
ArrayUtils::toTreeJson(array $data, int $pid=0, string $field='pid', string $pk='id');
/**
* 表单多维数据转换
* 例:
* 转换前:{"x":0,"a":[1,2,3],"b":[11,22,33],"c":[111,222,3333,444],"d":[1111,2222,3333]}
* 转换为:[{"a":1,"b":11,"c":111,"d":1111},{"a":2,"b":22,"c":222,"d":2222},{"a":3,"b":33,"c":3333,"d":3333}]
*
* @param $arr array (表单二维数组)
* @param $fill bool (fill为false,返回数据长度取最短,反之取最长,空值自动补充)
* @return array
*/
ArrayUtils::formToLinear(array $arr, $fill = false);
/**
* 多维数组合并
*
* @param $array1 (数组1)
* @param $array2 (数组2)
* @return array
*/
ArrayUtils::arrayMergeMultiple($array1, $array2);
响应工具
/**
* 响应成功
*
* @param array $data (数据集)
* @param string $msg (提示)
* @param int $code (状态码)
* @param int $httpCode (Http状态码)
* @return Json
*/
AjaxUtils::success($msg='操作成功', array $data=[], int $code=0, int $httpCode=200);
/**
* 请求错误
*
* @param array $data (数据集)
* @param string $msg (提示)
* @param int $code (状态码)
* @param int $httpCode (Http状态码)
* @return Json
*/
AjaxUtils::error($msg='请求错误', int $code=ErrorEnum::REQUEST_ERROR, array $data=[], int $httpCode=200);
附件工具
// PS: 此工具在后台文章管理处有使用到,不了解的可以看下代码
// 主要使用它的原因是: 可以避免很多上传了 而 又没去使用的 垃圾图片
// 这时候就可以通过标记的引用次数 考虑是否要去删除这个文件
/**
* 标记附件引用
* PS: 附件引用+1
*
* @param array $post (提交数据)
* @param array $keys (处理的键: postKey@sqlKey)
* @author zero
*/
public static function markCreate(array $post, array $keys): void
/**
* 标记附件更新
* PS: 如果附件引用+1,否侧取消引用-1
*
* @param array $objs (原始数据)
* @param array $post (提交数据)
* @param array $keys (处理的键: postKey@sqlKey)
* @author zero
*/
public static function markUpdate(array $objs, array $post, array $keys): void
/**
* 标记附件更新
* PS: 如果附件引用+1,否侧取消引用-1
*
* @param array $objs (原始数据)
* @param array $post (提交数据)
* @param array $keys (处理的键: postKey@sqlKey)
* @author zero
*/
public static function markUpdate(array $objs, array $post, array $keys): void
/**
* 更新附件引用
*
* @param string $url
* @param string $scene
* @author zero
*/
private static function _updateQuote(string $url, string $scene)