ThinkLibrary

Latest Stable VersionLatest Unstable VersionTotal DownloadsMonthly DownloadsDaily DownloadsPHP VersionLicense

ThinkLibrary 是针对 ThinkPHP6 封装的一套常用工具类库,方便快速构建 Web 应用。

代码主仓库放在 GiteeGithub 仅为镜像仓库用于发布 Composer 包。

包含功能说明

  • 数据列表展示(可带高级搜索器)
  • FORM 表单处理器(表单展示及数据入库)
  • 数据状态快速处理(数据指定字段更新,支持多字段同时)
  • 数据安全删除处理(硬删除 + 软删除,is_deleteddeleted 字段存在则自动软删除)
  • 文件存储通用组件(本地服务存储、自建 Alist 存储、七牛云对象存储、又拍云 USS 存储、阿里云 OSS 存储、腾讯云 COS 存储)
  • 通用数据保存更新(通过 key 值及 where 判定是否存在,存在则更新,不存在则新增)
  • 通用网络请求(支持 getpost,可配置请求证书等)
  • 系统参数通用 g-k-v 配置(快速参数长久化配置)
  • UTF8 加密算法支持(安全 URL 传递参数)
  • 接口 CORS 跨域默认支持(输出 JSON 标准化)
  • 支持表单 CSRF 安全验证(自动化 FORM 标签替换)
  • 更新功能等待您来发现哦....

标准项目案例

ThinkAdmin - V6

  • Gitee 仓库 https://gitee.com/zoujingli/ThinkAdmin
  • Github 仓库 https://github.com/zoujingli/ThinkAdmin
  • 体验地址( 账号密码都是 admin )https://v6.thinkadmin.top

代码开源仓库

ThinkLibrary 遵循 MIT 开源协议发布,并免费提供使用。

部分代码来自互联网,若有异议可以联系作者进行删除。

  • 在线体验地址:https://v6.thinkadmin.top (账号和密码都是 admin )
  • Gitee 仓库地址:https://gitee.com/zoujingli/ThinkLibrary
  • Github 仓库地址:https://github.com/zoujingli/ThinkLibrary

扩展使用案例

  • ThinkLibrary 需要 Composer 支持
  • 安装命令:composer require zoujingli/think-library
  • 案例代码: 控制器需要继承 think\admin\Controller,然后 $this 就可能使用全部功能
// 定义 MyController 控制器
class MyController extend \think\admin\Controller {

    // 指定当前数据表名
    protected $dbQuery = '数据表名';
    
    // 显示数据列表
    public function index(){
        $this->_page($this->dbQuery);
    }
    
    // 当前列表数据处理
    protected function _index_page_filter(&$data){
         foreach($data as &$vo){
            // @todo 修改原列表
         }
    }
    
}
  • 必要数据库表SQL(sysdata 函数需要用这个表)
CREATE TABLE `system_data`
(
    `id`    bigint(11) unsigned NOT NULL AUTO_INCREMENT,
    `name`  varchar(100) DEFAULT NULL COMMENT '配置名',
    `value` longtext COMMENT '配置值',
    PRIMARY KEY (`id`) USING BTREE,
    KEY     `idx_system_data_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-数据';
  • 必要数据库表SQl(sysoplog 函数需要用的这个表)
CREATE TABLE `system_oplog`
(
    `id`        bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `node`      varchar(200)  NOT NULL DEFAULT '' COMMENT '当前操作节点',
    `geoip`     varchar(15)   NOT NULL DEFAULT '' COMMENT '操作者IP地址',
    `action`    varchar(200)  NOT NULL DEFAULT '' COMMENT '操作行为名称',
    `content`   varchar(1024) NOT NULL DEFAULT '' COMMENT '操作内容描述',
    `username`  varchar(50)   NOT NULL DEFAULT '' COMMENT '操作人用户名',
    `create_at` timestamp     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-日志';
  • 必要数据库表SQL(sysconf函数需要用到这个表)
CREATE TABLE `system_config`
(
    `type`  varchar(20)  DEFAULT '' COMMENT '分类',
    `name`  varchar(100) DEFAULT '' COMMENT '配置名',
    `value` varchar(500) DEFAULT '' COMMENT '配置值',
    KEY     `idx_system_config_type` (`type`),
    KEY     `idx_system_config_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-配置';
  • 系统任务列队支持需要的数据表
CREATE TABLE `system_queue` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `code` varchar(20) DEFAULT '' COMMENT '任务编号',
  `title` varchar(50) NOT NULL DEFAULT '' COMMENT '任务名称',
  `command` varchar(500) DEFAULT '' COMMENT '执行指令',
  `exec_data` longtext COMMENT '执行参数',
  `exec_time` bigint(20) unsigned DEFAULT '0' COMMENT '执行时间',
  `exec_desc` varchar(500) DEFAULT '' COMMENT '状态描述',
  `enter_time` bigint(20) DEFAULT '0' COMMENT '开始时间',
  `outer_time` bigint(20) DEFAULT '0' COMMENT '结束时间',
  `attempts` bigint(20) DEFAULT '0' COMMENT '执行次数',
  `rscript` tinyint(1) DEFAULT '1' COMMENT '单例模式',
  `status` tinyint(1) DEFAULT '1' COMMENT '任务状态(1新任务,2处理中,3成功,4失败)',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_system_queue_code` (`code`),
  KEY `idx_system_queue_title` (`title`) USING BTREE,
  KEY `idx_system_queue_status` (`status`) USING BTREE,
  KEY `idx_system_queue_rscript` (`rscript`) USING BTREE,
  KEY `idx_system_queue_create_at` (`create_at`) USING BTREE,
  KEY `idx_system_queue_exec_time` (`exec_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-任务';

数据列表处理

// 列表展示
$this->_page($dbQuery, $isPage, $isDisplay, $total);

// 列表展示搜索器(按 name、title 模糊搜索;按 status 精确搜索)
$this->_query($dbQuery)->like('name,title')->equal('status')->page();

// 对列表查询器进行二次处理
$query = $this->_query($dbQuery)->like('name, title')->equal('status');
$db = $query->db(); // @todo 这里可以对db进行操作
$this->_page($db); // 显示列表分页

表单保存更新

// 表单显示及数据更新
$this->_form($dbQuery, $tplFile, $pkField , $where, $data);

数据删除操作

// 数据删除处理
$this->_deleted($dbQuery);

禁用启用操作

// 数据禁用处理
$this->_save($dbQuery, ['status'=>'0']);

// 数据启用处理
$this->_save($dbQuery, ['status'=>'1']);

文件存储引擎


// 配置默认存储方式    
sysconf('storage.type','文件存储类型');

// 七牛云存储配置
sysconf('storage.qiniu_region', '文件存储节点');
sysconf('storage.qiniu_domain', '文件访问域名');
sysconf('storage.qiniu_bucket', '文件存储空间名称');
sysconf('storage.qiniu_is_https', '文件HTTP访问协议');
sysconf('storage.qiniu_access_key', '接口授权AccessKey');
sysconf('storage.qiniu_secret_key', '接口授权SecretKey');


// 生成文件名称(链接url或文件md5)
$filename = \think\admin\Storage::name($url, $ext, $prv, $fun);

// 获取文件内容(自动存储方式)
$result = \think\admin\Storage::get($filename);

// 保存内容到文件(自动存储方式)
$result = \think\admin\Storage::save($filename, $content);

// 判断文件是否存在
boolean \think\admin\Storage::has($filename);

// 获取文件信息
$result = \think\admin\Storage::info($filename);

//指定存储类型(调用方法)
$result = \think\admin\Storage::instance('local')->save($filename, $content);
$result = \think\admin\Storage::instance('qiniu')->save($filename, $content);
$result = \think\admin\Storage::instance('txcos')->save($filename, $content);
$result = \think\admin\Storage::instance('upyun')->save($filename, $content);
$result = \think\admin\Storage::instance('alioss')->save($filename, $content);

// 读取文件内容
$result = \think\admin\Storage::instance('local')->get($filename);
$result = \think\admin\Storage::instance('qiniu')->get($filename);
$result = \think\admin\Storage::instance('txcos')->get($filename);
$result = \think\admin\Storage::instance('upyun')->get($filename);
$result = \think\admin\Storage::instance('alioss')->get($filename);

// 生成 URL 访问地址
$result = \think\admin\Storage::instance('local')->url($filename);
$result = \think\admin\Storage::instance('qiniu')->url($filename);
$result = \think\admin\Storage::instance('txcos')->url($filename);
$result = \think\admin\Storage::instance('upyun')->url($filename);
$result = \think\admin\Storage::instance('alioss')->url($filename);

// 检查文件是否存在
boolean \think\admin\Storage::instance('local')->has($filename);
boolean \think\admin\Storage::instance('qiniu')->has($filename);
boolean \think\admin\Storage::instance('txcos')->has($filename);
boolean \think\admin\Storage::instance('upyun')->has($filename);
boolean \think\admin\Storage::instance('alioss')->has($filename);

// 生成文件信息
$resutl = \think\admin\Storage::instance('local')->info($filename);
$resutl = \think\admin\Storage::instance('qiniu')->info($filename);
$resutl = \think\admin\Storage::instance('txcos')->info($filename);
$resutl = \think\admin\Storage::instance('upyun')->info($filename);
$resutl = \think\admin\Storage::instance('alioss')->info($filename);

工具函数封装

通用数据保存

// 指定关键列更新($where 为扩展条件)
boolean data_save($dbQuery, $data, 'pkname', $where);

通用网络请求

// 发起get请求
$result = http_get($url, $query, $options);

// 发起post请求
$result = http_post($url, $data, $options);

系统参数读写

基于 system_config 数据表

// 设置参数
sysconf($keyname, $keyvalue);

// 获取参数
$keyvalue = sysconf($kename);

数据压缩解压

// 数据压缩 ( 内容越大效果越好 )
$enzip = \think\admin\extend\CodeExtend::enzip($content)

// 数据解压 ( 内容越大效果越好 )
$content = \think\admin\extend\CodeExtend::dezip($enzip)

数据树形结构

// 二维数组 转为 立体数据结构,需要存在 id 及 pid 关系
$tree = \think\admin\extend\CodeExtend::arr2tree($list);

// 二维数组 转为 扁平数据结构,需要存在 id 及 pid 关系
$tree = \think\admin\extend\CodeExtend::arr2table($list);

对称加密解密

// 数据 AES-256-CBC 对称加密
$encrypt = \think\admin\extend\CodeExtend::encrypt($content, $enckey);

// 数据 AES-256-CBC 对称解密
$content = \think\admin\extend\CodeExtend::decrypt($encrypt, $enckey);

UTF8 数据加密

// 自研 UTF8 字符串加密操作
$string = encode($content);

// 自研 UTF8 加密字符串解密
$content = decode($string);

UTF8 编码转码

// 文本转 UTF8 编码
$content = \think\admin\extend\CodeExtend::text2utf8($content)

Base64 安全编码

// 文本 Base64 URL 编码
$safe64 = \think\admin\extend\CodeExtend::enSafe64($content)

// 文本 Base64 URL 解码
$content = \think\admin\extend\CodeExtend::deSafe64($safe64)
Last Updated:
Contributors: 邹景立