{"id":19011674,"url":"https://github.com/zoujingli/thinklibrary","last_synced_at":"2025-04-07T11:08:36.695Z","repository":{"id":39310204,"uuid":"144353773","full_name":"zoujingli/ThinkLibrary","owner":"zoujingli","description":"Library for ThinkAdmin","archived":false,"fork":false,"pushed_at":"2024-04-13T16:00:22.000Z","size":3013,"stargazers_count":77,"open_issues_count":0,"forks_count":32,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-04-14T05:55:36.196Z","etag":null,"topics":["admin","thinkadmin","thinklibrary","thinkphp"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zoujingli.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-08-11T03:57:46.000Z","updated_at":"2024-04-15T15:19:47.358Z","dependencies_parsed_at":"2023-02-05T04:32:23.518Z","dependency_job_id":"5b2232c4-4f5e-4ee6-804d-abb5ffd41130","html_url":"https://github.com/zoujingli/ThinkLibrary","commit_stats":{"total_commits":2481,"total_committers":6,"mean_commits":413.5,"dds":0.00241837968561065,"last_synced_commit":"e14c0ab5bc4715b2d36d31aa593bdc5e598bc739"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoujingli%2FThinkLibrary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoujingli%2FThinkLibrary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoujingli%2FThinkLibrary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoujingli%2FThinkLibrary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zoujingli","download_url":"https://codeload.github.com/zoujingli/ThinkLibrary/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247640464,"owners_count":20971557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["admin","thinkadmin","thinklibrary","thinkphp"],"created_at":"2024-11-08T19:15:23.142Z","updated_at":"2025-04-07T11:08:36.672Z","avatar_url":"https://github.com/zoujingli.png","language":"PHP","readme":"# ThinkLibrary for ThinkPHP6\n\n[![Latest Stable Version](https://poser.pugx.org/zoujingli/think-library/v/stable)](https://packagist.org/packages/zoujingli/think-library)\n[![Latest Unstable Version](https://poser.pugx.org/zoujingli/think-library/v/unstable)](https://packagist.org/packages/zoujingli/think-library)\n[![Total Downloads](https://poser.pugx.org/zoujingli/think-library/downloads)](https://packagist.org/packages/zoujingli/think-library)\n[![Monthly Downloads](https://poser.pugx.org/zoujingli/think-library/d/monthly)](https://packagist.org/packages/zoujingli/think-library)\n[![Daily Downloads](https://poser.pugx.org/zoujingli/think-library/d/daily)](https://packagist.org/packages/zoujingli/think-library)\n[![PHP Version](https://thinkadmin.top/static/icon/php-7.1.svg)](https://thinkadmin.top)\n[![License](https://thinkadmin.top/static/icon/license-mit.svg)](https://mit-license.org)\n\n**ThinkLibrary** 是一个针对 **ThinkPHP 6 \u0026 8** 的封装库，它提供了完整的 **CRUD**（创建、读取、更新、删除）操作和一系列常用工具。\n该库特别注重多应用支持，为开发者提供便利。前端代码的主仓库位于 **Gitee**，而 **GitHub** 则作为镜像仓库用于发布 **Composer** 包，以方便开发者下载和使用。\n\n## 加入我们\n\n我们的代码仓库已移至 **Github**，而 **Gitee** 则仅作为国内镜像仓库，方便广大开发者获取和使用。若想提交 **PR** 或 **ISSUE** 请在 [ThinkAdminDeveloper](https://github.com/zoujingli/ThinkAdminDeveloper) 仓库进行操作，如果在其他仓库操作或提交问题将无法处理！。\n\n## 功能说明\n\n1. 数据列表展示组件\n\n* 功能：展示数据列表，支持分页、排序和高级搜索。\n* 优化点：提供友好的用户界面和交互体验，确保数据展示的准确性和实时性。\n* 高级特性：支持多种排序方式、自定义搜索字段和条件。\n\n2. 表单处理模块\n\n* 功能：用于创建、展示和提交表单数据。\n* 优化点：表单验证和错误处理机制，确保数据的有效性和完整性。\n* 高级特性：支持多种表单元素、表单验证规则和动态表单生成。\n\n3. 数据状态快速处理模块\n\n* 功能：根据业务需求快速更新数据状态。\n* 优化点：提供简洁的接口和操作方式，支持多字段同时更新。\n* 高级特性：支持条件判断和事务处理，确保数据一致性和完整性。\n\n4. 数据安全删除模块\n\n* 功能：根据业务需求安全地删除数据。\n* 优化点：提供软删除和硬删除两种方式，确保数据彻底消失或标记为已删除。\n* 高级特性：支持根据条件自动软删除、可配置的软删除标记字段。\n\n5. 文件存储通用组件\n\n* 功能：支持多种文件存储方式，包括本地服务存储、云存储等。\n* 优化点：提供统一的接口和配置方式，方便开发者快速集成和使用。\n* 高级特性：支持文件上传、下载、删除和版本控制等功能。\n\n6. 通用数据保存更新模块\n\n* 功能：根据 key 值及 where 条件判断数据是否存在，进行更新或新增操作。\n* 优化点：提供简洁的接口和操作方式，减少冗余代码和重复工作量。\n* 高级特性：支持乐观锁和悲观锁机制，确保并发控制和数据一致性。\n\n7. 通用网络请求模块\n\n* 功能：支持 GET、POST 和 PUT 请求，可配置请求参数、证书等。\n* 优化点：提供统一的接口和配置方式，方便开发者快速发起网络请求。\n* 高级特性：支持请求重试、超时设置、自动捕获异常等功能。\n\n8. 系统参数通用 g-k-v 配置模块\n\n* 功能：快速配置系统参数，支持长久化保存。\n* 优化点：提供简洁的接口和操作方式，方便开发者管理和维护系统参数。\n* 高级特性：支持参数加密存储、权限控制和日志记录等功能。\n\n9. UTF8 加密算法支持模块\n\n* 功能：提供 UTF8 字符串的加密和解密功能。\n* 优化点：确保加密过程的安全性和数据的机密性。\n* 高级特性：支持多种加密算法、密钥管理等功能。\n\n10. 接口 CORS 跨域默认支持模块\n\n* 功能：默认支持跨域请求，输出标准化 JSON 数据。\n* 优化点：减少开发者的工作量，自动处理跨域问题。\n* 高级特性：支持定制化响应头、跨域请求限制等功能。\n\n11. 表单 CSRF 安全验证模块\n\n* 功能：自动为表单添加 CSRF 安全验证字段，防止恶意提交。\n* 优化点：简化开发者的工作流程，提高表单提交的安全性。\n* 高级特性：支持自定义验证规则、多种验证方式等功能。\n\n## 参考项目\n\n#### ThinkAdmin - V6\n\n* Gitee 仓库 https://gitee.com/zoujingli/ThinkAdmin\n* Github 仓库 https://github.com/zoujingli/ThinkAdmin\n* 体验地址（账号密码都是admin）https://v6.thinkadmin.top\n\n## 代码仓库\n\n**ThinkLibrary** 遵循 **MIT** 开源协议发布，并免费提供使用。\n\n部分代码来自互联网，若有异议可以联系作者进行删除。\n\n* 在线体验地址：https://v6.thinkadmin.top （账号和密码都是 `admin` ）\n* **Gitee** 仓库地址：https://gitee.com/zoujingli/ThinkLibrary\n* **Github** 仓库地址：https://github.com/zoujingli/ThinkLibrary\n\n## 使用说明\n\n1. **依赖管理**：ThinkLibrary 需要 Composer 支持进行安装和依赖管理。\n2. **安装指南**：您可以使用以下命令通过 Composer 安装 ThinkLibrary：`composer require zoujingli/think-library`。\n3. **使用示例**：在使用 ThinkLibrary 时，确保您的控制器类继承自 `think\\admin\\Controller`。一旦继承完成，您就可以通过 `$this` 对象访问并使用全部功能。\n\n```php\n// 定义 MyController 控制器\nclass MyController extend \\think\\admin\\Controller {\n\n    // 指定当前数据表名\n    protected $dbQuery = '数据表名';\n    \n    // 显示数据列表\n    public function index(){\n        $this-\u003e_page($this-\u003edbQuery);\n    }\n    \n    // 当前列表数据处理\n    protected function _index_page_filter(\u0026$data){\n         foreach($data as \u0026$vo){\n            // @todo 修改原列表\n         }\n    }\n    \n}\n```\n\n* 必要数据库表SQL（sysdata 函数需要用这个表）\n\n```sql\nCREATE TABLE `system_data`\n(\n    `id`    bigint(11) unsigned NOT NULL AUTO_INCREMENT,\n    `name`  varchar(100) DEFAULT NULL COMMENT '配置名',\n    `value` longtext COMMENT '配置值',\n    PRIMARY KEY (`id`) USING BTREE,\n    KEY     `idx_system_data_name` (`name`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-数据';\n```\n\n* 必要数据库表SQl（sysoplog 函数需要用的这个表）\n\n```sql\nCREATE TABLE `system_oplog`\n(\n    `id`        bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n    `node`      varchar(200)  NOT NULL DEFAULT '' COMMENT '当前操作节点',\n    `geoip`     varchar(15)   NOT NULL DEFAULT '' COMMENT '操作者IP地址',\n    `action`    varchar(200)  NOT NULL DEFAULT '' COMMENT '操作行为名称',\n    `content`   varchar(1024) NOT NULL DEFAULT '' COMMENT '操作内容描述',\n    `username`  varchar(50)   NOT NULL DEFAULT '' COMMENT '操作人用户名',\n    `create_at` timestamp     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n    PRIMARY KEY (`id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-日志';\n```\n\n* 必要数据库表SQL（`sysconf`函数需要用到这个表）\n\n```sql\nCREATE TABLE `system_config`\n(\n    `type`  varchar(20)  DEFAULT '' COMMENT '分类',\n    `name`  varchar(100) DEFAULT '' COMMENT '配置名',\n    `value` varchar(500) DEFAULT '' COMMENT '配置值',\n    KEY     `idx_system_config_type` (`type`),\n    KEY     `idx_system_config_name` (`name`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-配置';\n```\n\n* 系统任务列队支持需要的数据表\n\n```sql\nCREATE TABLE `system_queue`\n(\n    `id`         bigint(20) NOT NULL AUTO_INCREMENT,\n    `code`       varchar(20)          DEFAULT '' COMMENT '任务编号',\n    `title`      varchar(50) NOT NULL DEFAULT '' COMMENT '任务名称',\n    `command`    varchar(500)         DEFAULT '' COMMENT '执行指令',\n    `exec_data`  longtext COMMENT '执行参数',\n    `exec_time`  bigint(20) unsigned DEFAULT '0' COMMENT '执行时间',\n    `exec_desc`  varchar(500)         DEFAULT '' COMMENT '状态描述',\n    `enter_time` bigint(20) DEFAULT '0' COMMENT '开始时间',\n    `outer_time` bigint(20) DEFAULT '0' COMMENT '结束时间',\n    `attempts`   bigint(20) DEFAULT '0' COMMENT '执行次数',\n    `rscript`    tinyint(1) DEFAULT '1' COMMENT '单例模式',\n    `status`     tinyint(1) DEFAULT '1' COMMENT '任务状态(1新任务,2处理中,3成功,4失败)',\n    `create_at`  timestamp   NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n    PRIMARY KEY (`id`) USING BTREE,\n    KEY          `idx_system_queue_code` (`code`),\n    KEY          `idx_system_queue_title` (`title`) USING BTREE,\n    KEY          `idx_system_queue_status` (`status`) USING BTREE,\n    KEY          `idx_system_queue_rscript` (`rscript`) USING BTREE,\n    KEY          `idx_system_queue_create_at` (`create_at`) USING BTREE,\n    KEY          `idx_system_queue_exec_time` (`exec_time`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-任务';\n```\n\n#### 列表处理\n\n```php\n// 列表展示\n$this-\u003e_page($dbQuery, $isPage, $isDisplay, $total);\n\n// 列表展示搜索器（按 name、title 模糊搜索；按 status 精确搜索）\n$this-\u003e_query($dbQuery)-\u003elike('name,title')-\u003eequal('status')-\u003epage();\n\n// 对列表查询器进行二次处理\n$query = $this-\u003e_query($dbQuery)-\u003elike('name, title')-\u003eequal('status');\n$db = $query-\u003edb(); // @todo 这里可以对db进行操作\n$this-\u003e_page($db); // 显示列表分页\n```\n\n#### 表单处理\n\n```php\n// 表单显示及数据更新\n$this-\u003e_form($dbQuery, $tplFile, $pkField , $where, $data);\n```\n\n#### 删除处理\n\n```php\n// 数据删除处理\n$this-\u003e_deleted($dbQuery);\n```\n\n#### 禁用启用处理\n\n```php\n// 数据禁用处理\n$this-\u003e_save($dbQuery, ['status'=\u003e'0']);\n\n// 数据启用处理\n$this-\u003e_save($dbQuery, ['status'=\u003e'1']);\n```\n\n#### 文件存储组件（ oss 及 qiniu 需要配置参数）\n\n```php\n\n// 配置默认存储方式    \nsysconf('storage.type','文件存储类型');\n\n// 七牛云存储配置\nsysconf('storage.qiniu_region', '文件存储节点');\nsysconf('storage.qiniu_domain', '文件访问域名');\nsysconf('storage.qiniu_bucket', '文件存储空间名称');\nsysconf('storage.qiniu_is_https', '文件HTTP访问协议');\nsysconf('storage.qiniu_access_key', '接口授权AccessKey');\nsysconf('storage.qiniu_secret_key', '接口授权SecretKey');\n\n\n// 生成文件名称(链接url或文件md5)\n$filename = \\think\\admin\\Storage::name($url, $ext, $prv, $fun);\n\n// 获取文件内容（自动存储方式）\n$result = \\think\\admin\\Storage::get($filename);\n\n// 保存内容到文件（自动存储方式）\n$result = \\think\\admin\\Storage::save($filename, $content);\n\n// 判断文件是否存在\nboolean \\think\\admin\\Storage::has($filename);\n\n// 获取文件信息\n$result = \\think\\admin\\Storage::info($filename);\n\n//指定存储类型（调用方法）\n$result = \\think\\admin\\Storage::instance('local')-\u003esave($filename, $content);\n$result = \\think\\admin\\Storage::instance('qiniu')-\u003esave($filename, $content);\n$result = \\think\\admin\\Storage::instance('txcos')-\u003esave($filename, $content);\n$result = \\think\\admin\\Storage::instance('upyun')-\u003esave($filename, $content);\n$result = \\think\\admin\\Storage::instance('alioss')-\u003esave($filename, $content);\n\n// 读取文件内容\n$result = \\think\\admin\\Storage::instance('local')-\u003eget($filename);\n$result = \\think\\admin\\Storage::instance('qiniu')-\u003eget($filename);\n$result = \\think\\admin\\Storage::instance('txcos')-\u003eget($filename);\n$result = \\think\\admin\\Storage::instance('upyun')-\u003eget($filename);\n$result = \\think\\admin\\Storage::instance('alioss')-\u003eget($filename);\n\n// 生成 URL 访问地址\n$result = \\think\\admin\\Storage::instance('local')-\u003eurl($filename);\n$result = \\think\\admin\\Storage::instance('qiniu')-\u003eurl($filename);\n$result = \\think\\admin\\Storage::instance('txcos')-\u003eurl($filename);\n$result = \\think\\admin\\Storage::instance('upyun')-\u003eurl($filename);\n$result = \\think\\admin\\Storage::instance('alioss')-\u003eurl($filename);\n\n// 检查文件是否存在\nboolean \\think\\admin\\Storage::instance('local')-\u003ehas($filename);\nboolean \\think\\admin\\Storage::instance('qiniu')-\u003ehas($filename);\nboolean \\think\\admin\\Storage::instance('txcos')-\u003ehas($filename);\nboolean \\think\\admin\\Storage::instance('upyun')-\u003ehas($filename);\nboolean \\think\\admin\\Storage::instance('alioss')-\u003ehas($filename);\n\n// 生成文件信息\n$resutl = \\think\\admin\\Storage::instance('local')-\u003einfo($filename);\n$resutl = \\think\\admin\\Storage::instance('qiniu')-\u003einfo($filename);\n$resutl = \\think\\admin\\Storage::instance('txcos')-\u003einfo($filename);\n$resutl = \\think\\admin\\Storage::instance('upyun')-\u003einfo($filename);\n$resutl = \\think\\admin\\Storage::instance('alioss')-\u003einfo($filename);\n```\n\n#### 通用数据保存\n\n```php\n// 指定关键列更新（$where 为扩展条件）\nboolean data_save($dbQuery, $data, 'pkname', $where);\n```\n\n#### 通用网络请求\n\n```php\n// 发起get请求\n$result = http_get($url, $query, $options);\n\n// 发起post请求\n$result = http_post($url, $data, $options);\n```\n\n#### 系统参数配置（基于 system_config 数据表）\n\n```php\n// 设置参数\nsysconf($keyname, $keyvalue);\n\n// 获取参数\n$keyvalue = sysconf($kename);\n```\n\n### 数据加密\n\n**自研 UTF8 加密**\n\n```php\n// 自研 UTF8 字符串加密操作\n$string = encode($content);\n\n// 自研 UTF8 加密字符串解密\n$content = decode($string);\n```\n\n**数据解密**\n\n```php\nuse think\\admin\\extend\\CodeExtend;\n\n// 数据 AES-256-CBC 对称加密\n$encrypt = CodeExtend::encrypt($content, $enckey);\n\n// 数据 AES-256-CBC 对称解密\n$content = CodeExtend::decrypt($encrypt, $enckey);\n```\n\n**文本转 UTF8 编码**\n\n```php\nuse think\\admin\\extend\\CodeExtend;\n\n// 文本转 UTF8 编码\n$content = CodeExtend::text2utf8($content)\n```\n\n**文本 Base64 URL 编码**\n\n```php\nuse think\\admin\\extend\\CodeExtend;\n\n// 文本 Base64 URL 编码\n$safe64 = CodeExtend::enSafe64($content)\n\n// 文本 Base64 URL 解码\n$content = CodeExtend::deSafe64($safe64)\n```\n\n### 数据压缩处理\n\n```php\nuse think\\admin\\extend\\CodeExtend;\n\n// 数据压缩 ( 内容越大效果越好 )\n$enzip = CodeExtend::enzip($content)\n\n// 数据解压 ( 内容越大效果越好 )\n$content = CodeExtend::dezip($enzip)\n```\n\n### 数组结构处理\n\n```php\nuse think\\admin\\extend\\CodeExtend;\n\n// 二维数组 转为 立体数据结构，需要存在 id 及 pid 关系\n$tree = CodeExtend::arr2tree($list);\n\n// 二维数组 转为 扁平数据结构，需要存在 id 及 pid 关系\n$tree = CodeExtend::arr2table($list);\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoujingli%2Fthinklibrary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzoujingli%2Fthinklibrary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoujingli%2Fthinklibrary/lists"}