内置工具

搜索器

注意

搜索器只能在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)
上次更新:
贡献者: zero, windy