📚 ThinkLibrary
ThinkLibrary 是 ThinkAdmin 的核心基础库,当前 composer.json 要求 PHP >=7.1,并声明兼容 topthink/framework ^6.0|^8.0|*。它提供后台控制器、模型快捷方法、Helper、存储、队列、运行配置、插件注册、权限校验、命令和常用扩展工具,不是独立业务插件,通常作为 ThinkAdmin 与各应用插件的基础依赖使用。
功能说明
后台控制器与模型基类
- 功能:提供
think\admin\Controller、think\admin\Model等基类。 - 覆盖范围:统一 JSON 响应、视图渲染、表单令牌、当前节点、模型快捷方法等基础能力。
- 功能:提供
Helper 快捷逻辑器
- 功能:提供
QueryHelper、FormHelper、SaveHelper、DeleteHelper、ValidateHelper、TokenHelper等常用处理器。 - 覆盖范围:用于列表查询、分页输出、表单处理、数据保存、软硬删除、输入验证和表单令牌处理。
- 功能:提供
文件存储抽象
- 功能:提供统一的
Storage入口和多种存储实现。 - 覆盖范围:包含本地存储、阿里云 OSS、腾讯云 COS、七牛云、又拍云、Alist 等存储适配。
- 功能:提供统一的
异步队列与命令支持
- 功能:提供
QueueService、think\admin\Queue、think\admin\Command和xadmin:queue等基础能力。 - 覆盖范围:支持任务注册、任务执行、进度消息、失败记录和命令行进程管理。
- 功能:提供
系统服务
- 功能:提供后台登录权限、菜单过滤、节点解析、运行配置、模块信息、验证码、接口网关等服务。
- 覆盖范围:对应
AdminService、MenuService、NodeService、RuntimeService、ModuleService、CaptchaService、InterfaceService等类。
插件注册基类
- 功能:提供
think\admin\Plugin抽象基类。 - 覆盖范围:记录插件编码、路径、命名空间、服务类、安装包,并要求后台插件实现静态
menu()方法。
- 功能:提供
数据库迁移辅助
- 功能:提供
PhinxExtend辅助生成和执行 ThinkAdmin 风格的迁移脚本。 - 覆盖范围:支持表结构升级、索引同步、菜单写入,以及
xadmin:package从 MySQL 生成结构/数据安装脚本。
- 功能:提供
常用扩展工具
- 功能:提供编码、数据、Excel、HTTP、JWT、图片验证码、虚拟模型等扩展类。
- 覆盖范围:对应
CodeExtend、DataExtend、ExcelExtend、HttpExtend、JwtExtend、ImageVerify、VirtualModel等类。
全局函数
- 功能:通过
src/common.php注册 ThinkAdmin 常用函数。 - 覆盖范围:包括权限判断、系统配置、系统数据、运行状态、URL、队列、存储访问等快捷函数。
- 功能:通过
当前注册命令
ThinkLibrary 服务类 think\admin\Library 在 boot() 中注册以下命令:
xadmin:queue [stop|start|status|query|listen|clean|dorun|webstop|webstart|webstatus]xadmin:package [--all] [--force] [--table=...] [--backup=...]xadmin:sysmenuxadmin:publish [--force] [--migrate]xadmin:replace <search> <replace>xadmin:database [repair|optimize]
命令职责建议按下面方式理解:
| 命令 | 主要作用 | 适用场景 |
|---|---|---|
xadmin:publish | 汇总服务、版本信息,发布应用资源,可带 --migrate 执行迁移 | Composer 安装/更新后重新生成运行所需文件 |
xadmin:queue | 启动、停止、查询、清理异步任务监听与任务执行 | 后台队列和定时任务运行维护 |
xadmin:package | 从现有 MySQL 数据库生成结构或数据迁移脚本 | 插件发布前整理数据库安装脚本 |
xadmin:sysmenu | 清理并重置系统菜单数据 | 菜单迁移或插件菜单重置后的维护 |
xadmin:replace | 替换数据库字符字段内容 | 域名、路径或历史文本批量替换 |
xadmin:database | 优化或修复数据库表 | 运维维护,默认执行优化 |
xadmin:helper:model 与 xadmin:helper:index 不属于 ThinkLibrary,它们来自开发辅助插件 think-plugs-helper,建议只作为 --dev 依赖在开发环境使用。
参考项目
- ThinkAdmin - V6
- Gitee 仓库:ThinkAdmin
- GitHub 仓库:ThinkAdmin
- 体验地址(账号和密码:
admin):体验地址
代码仓库
ThinkLibrary 遵循 MIT 开源协议发布,免费使用。部分代码来源于互联网,若有异议可联系作者删除。
- 在线体验地址:体验地址(账号和密码:
admin) - Gitee 仓库:ThinkLibrary
- GitHub 仓库:ThinkLibrary
加入我们
项目与插件源码统一在 ThinkAdminDeveloper 仓库维护,文档或代码问题建议在该仓库提交反馈。
使用说明
- 依赖管理:ThinkLibrary 需要 Composer 支持进行安装和依赖管理。
- 安装指南:使用以下命令安装 ThinkLibrary:
composer require zoujingli/think-library - 使用示例:在使用时,确保控制器继承自
think\admin\Controller。<?php declare(strict_types=1); namespace app\admin\controller; use think\admin\Controller; use think\admin\helper\QueryHelper; use think\admin\model\SystemUser; /** * 示例控制器 * @class Example * @package app\admin\controller */ class Example extends Controller { /** * 数据列表 * @auth true * @menu true */ public function index() { // 使用 QueryHelper 进行数据查询(推荐使用模型方法) SystemUser::mQuery()->layTable(function () { $this->title = '数据管理'; }, function (QueryHelper $query) { $query->where(['is_deleted' => 0]); $query->like('username,nickname')->equal('status'); }); } /** * 表单处理 * @auth true */ public function form() { // 使用 FormHelper 进行表单处理(推荐使用模型方法) SystemUser::mForm('form'); } /** * 状态更新 * @auth true */ public function state() { // 使用 SaveHelper 进行数据状态更新(推荐使用模型方法) SystemUser::mSave($this->_vali([ 'status.require' => '状态值不能为空!', 'status.in:0,1' => '状态值范围异常!' ])); } /** * 列表数据后处理 * @param array $data */ protected function _index_page_filter(array &$data) { foreach ($data as &$vo) { // 对列表数据进行二次处理 $vo['status_text'] = $vo['status'] ? '启用' : '禁用'; $vo['create_time'] = date('Y-m-d H:i:s', strtotime($vo['create_at'])); } } }
必要数据库表 SQL
这些表由后台管理插件迁移脚本创建,ThinkLibrary 本身不包含独立迁移脚本;这里只列出核心库常用服务依赖的基础表结构示例。
system_data 表:
CREATE TABLE `system_data` (
`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL COMMENT '配置名',
`value` longtext COMMENT '配置值',
PRIMARY KEY (`id`),
KEY `idx_system_data_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-数据';system_oplog 表:
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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-日志';system_config 表:
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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统-配置';