ThinkAdmin/docs/architecture/plugins-detail.md
Anyon 6f4056f64d docs(architecture): 完善 v8 架构与迁移说明
补充 v8 重构后的架构文档、组件说明和迁移记录,方便后续维护者理解插件边界。

主要内容:

- 更新根 README,说明 v8 插件分层、系统模块、交付命令和验证流程。

- 新增组件明细、插件边界、路由分发、软删除和稳定性文档。

- 记录 Storage 合并到 System、旧 View 移除和 Helper 并入 System 的决策。

- 补充文档注释报告和后续重构计划,便于持续演进。
2026-05-08 15:31:22 +08:00

775 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 插件详细说明
本文档详细描述每个插件的功能、结构、依赖和使用方式。
## 核心组件
### ThinkLibrary
**包名**: `zoujingli/think-library`
**定位**: 核心基础库,提供整个框架的运行时基础设施
**命名空间**: `think\admin\`
**服务注册**:
```json
{
"extra": {
"think": {
"services": ["think\admin\Library"]
}
}
}
```
**核心功能**:
- **运行时服务**: `RuntimeService`, `AppService`, `NodeService`
- **认证会话**: `JwtToken`, `CacheSession`, `RequestTokenService`
- **路由适配**: `Route`, `Url`, `MultAccess` 中间件
- **队列契约**: `QueueService` (门面), `QueueServiceInterface` (契约)
- **Storage 门面**: `Storage` 统一存储接口
- **基础类型**: `Controller`, `Model`, `Command`, `Plugin`, `Service`, `Exception`
- **Helper 工具**: `QueryHelper`, `FormBuilder`, `PageBuilder`, `ValidateHelper`
- **扩展工具**: `CodeToolkit`, `FileTools`, `HttpClient`, `ArrayTree`
**接口响应约定**:
- HTTP JSON 接口统一返回 HTTP `200`
- 常用业务状态码统一为 `200/401/403/404/500`
- 标准 JSON 字段为 `code``info``data`,鉴权异常可附加稳定 `error`
**目录结构**:
```
think-library/
├── src/
│ ├── contract/ # 标准契约接口
│ ├── extend/ # 扩展工具类
│ ├── helper/ # 构建器工具
│ ├── middleware/ # 中间件
│ ├── model/ # 模型扩展
│ ├── route/ # 路由相关
│ ├── runtime/ # 运行时上下文
│ ├── service/ # 核心服务
│ ├── common.php # 全局函数
│ ├── Controller.php # 标准控制器
│ ├── Model.php # 标准模型
│ └── Library.php # 服务注册类
└── tests/ # 单元测试
```
**依赖关系**:
- PHP >= 8.1
- ThinkPHP 8.1+
- 扩展gd, curl, json, zlib, iconv, openssl, mbstring
---
### ThinkPlugsSystem
**包名**: `zoujingli/think-plugs-system`
**定位**: 系统后台,提供后台壳层、认证权限和系统运维能力
**命名空间**: `plugin\system\`
**服务注册**:
```json
{
"extra": {
"think": {
"services": ["plugin\\system\\Service"]
},
"xadmin": {
"app": {
"code": "system",
"name": "系统管理",
"prefix": "system"
}
}
}
}
```
**数据表**:
- `system_base` - 系统基础配置
- `system_data` - 系统扩展数据
- `system_oplog` - 系统操作日志
- `system_file` - 系统文件记录
- `system_auth` - 系统权限角色
- `system_auth_node` - 权限节点绑定
- `system_menu` - 系统菜单管理
- `system_user` - 系统用户管理
**核心功能**:
- **后台壳层**: 登录页面、首页、后台框架
- **认证授权**: JWT 认证、RBAC 权限、菜单控制
- **系统用户**: 用户管理、角色管理、权限分配
- **系统配置**: 参数配置、字典管理、配置缓存
- **操作日志**: 操作记录、日志审计
- **任务管理**: 系统任务查看和管理
- **存储中心**: 文件管理、上传授权、多存储驱动
- **开发交付工具**: 资源发布、安装包生成、迁移导出、菜单校验
**目录结构**:
```
think-plugs-system/
├── src/
│ ├── controller/ # 控制器
│ ├── helper/ # 开发交付工具plugin\system\helper\*
│ ├── lang/ # 语言包
│ ├── middleware/ # 中间件 (JwtTokenAuth, RbacAccess)
│ ├── model/ # 模型
│ ├── route/ # 路由
│ ├── service/ # 服务
│ │ ├── CaptchaService.php
│ │ ├── SystemAuthService.php
│ │ ├── SystemContext.php
│ │ ├── SystemService.php
│ │ └── UserService.php
│ ├── storage/ # 存储驱动与上传授权
│ └── view/ # 视图模板
├── stc/database/ # 数据库迁移
└── tests/ # 单元测试
```
**依赖**:
- ThinkLibrary
- ThinkPlugsStatic
- ThinkPlugsWorker
- Doctrine/DBAL
- ThinkPHP Migration
- ThinkPHP IDE Helper
---
### ThinkPlugsWorker
**包名**: `zoujingli/think-plugs-worker`
**定位**: Workerman 运行时,提供 HTTP 和队列常驻服务
**命名空间**: `plugin\worker\`
**服务注册**:
```json
{
"extra": {
"think": {
"services": ["plugin\\worker\\Service"]
},
"xadmin": {
"app": {
"code": "worker",
"name": "运行时服务",
"prefix": "worker"
}
}
}
}
```
**数据表**:
- `system_queue` - 系统任务队列
**核心功能**:
- **HTTP 服务**: 托管系统 HTTP 服务,支持多进程
- **队列服务**: 长耗时任务调度、延时任务处理
- **进程管理**: 跨平台进程控制start/stop/status/restart
- **状态监控**: 内存监控、文件监控、健康检查
**命令入口**:
```bash
php think xadmin:worker start http -d # 启动 HTTP 服务
php think xadmin:worker start queue -d # 启动队列服务
php think xadmin:worker status all # 查看运行状态
php think xadmin:worker stop http # 停止 HTTP 服务
php think xadmin:worker restart all # 重启所有服务
```
**跨平台实现**:
- **Linux/macOS**: Workerman 守护进程 + 信号控制reload/stop
- **Windows**: console.exe 启动后台 PHP 进程 + 进程扫描
**目录结构**:
```
think-plugs-worker/
├── src/
│ ├── command/ # CLI 命令
│ ├── model/ # 模型
│ ├── service/ # 服务
│ │ ├── Server.php
│ │ ├── QueueService.php
│ │ └── ProcessService.php
│ └── common.php # 全局函数
├── stc/
│ └── worker.php # 配置文件模板
└── tests/ # 单元测试
```
**依赖**:
- ThinkLibrary
- Workerman 5.1.9+
- Symfony/Process 6.0+
---
### System 内置存储中心
**包名**: `zoujingli/think-plugs-system`
**定位**: System 内置存储中心,统一管理存储驱动和上传授权
**命名空间**: `plugin\system\storage\`
**服务注册**: 随 `plugin\system\Service` 注册,并通过 `StorageManagerInterface` 绑定真实实现。
**数据表**:
- `system_file` - 系统文件记录
**核心功能**:
- **驱动管理**: 本地存储、OSS、COS、七牛等驱动注册
- **配置中心**: 存储配置管理、驱动切换
- **上传授权**: 临时授权、上传令牌、安全校验
- **文件管理**: 文件列表、下载、删除、统计
**目录结构**:
```
think-plugs-system/
├── src/
│ ├── controller/Config.php # 存储配置入口
│ ├── controller/File.php # 文件管理入口
│ ├── controller/api/Upload.php # 上传接口
│ ├── model/SystemFile.php # 文件记录模型
│ └── storage/ # 存储驱动与授权
│ ├── StorageConfig.php
│ ├── StorageManager.php
│ ├── StorageAuthorize.php
│ └── LocalStorage.php
└── stc/database/ # system_file 迁移随 System 发布
```
**依赖**:
- ThinkLibrary
---
### System 内置开发交付工具
**归属包名**: `zoujingli/think-plugs-system`
**定位**: 原 ThinkPlugsHelper 已合并到 System提供迁移、发布、打包等开发交付能力。
**命名空间**: `plugin\system\helper\`
**代码位置**: `plugin/think-plugs-system/src/helper/`
**服务注册**:
```json
{
"extra": {
"think": {
"services": ["plugin\\system\\Service", "plugin\\system\\helper\\Service"]
},
"xadmin": {
"app": {
"code": "system",
"name": "系统管理",
"prefix": "system"
}
}
}
}
```
**核心功能**:
- **发布工具**: `xadmin:publish` - 发布配置、静态资源、迁移脚本
- **打包工具**: `xadmin:package` - 生成安装包
- **迁移工具**: `xadmin:helper:migrate` - 生成插件迁移脚本
- **模型工具**: `xadmin:helper:model` - 生成模型文件
- **菜单工具**: 菜单校验、节点同步
- **注释工具**: 自动生成代码注释
**目录结构**:
```
think-plugs-system/
└── src/helper/
├── Service.php
├── command/ # CLI 命令
│ ├── database/ # 数据库相关命令
│ ├── project/ # 发布与打包命令
│ └── system/ # 系统维护命令
├── database/ # 数据库工具
├── integration/ # 集成服务
├── migration/ # 迁移工具
├── model/ # 模型工具
├── plugin/ # 插件工具
│ ├── PluginMenuService.php
│ └── PluginRegistry.php
└── service/ # 服务模板
```
**依赖**:
- ThinkLibrary
- ThinkPlugsWorker
- Doctrine/DBAL
- ThinkPHP Migration
- ThinkPHP IDE Helper
---
### ThinkPlugsStatic
**包名**: `zoujingli/think-plugs-static`
**定位**: 静态资源和项目骨架组件
**特点**:
- 无前缀,不直接访问
- 通过其他插件间接使用
- 提供静态资源发布能力
**核心功能**:
- **静态资源**: LayUI、jQuery、前端模块等
- **模板文件**: 后台模板、错误页面、主题样式
- **项目骨架**: 新项目初始化模板
- **图标字体**: iconfont 图标库
---
## 平台插件
### ThinkPlugsWechatClient
**包名**: `zoujingli/think-plugs-wechat-client`
**定位**: 微信公众号标准平台
**命名空间**: `plugin\wechat\`
**访问前缀**: `wechat`
**核心功能**:
- 公众号基础配置
- 菜单管理
- 消息推送
- 粉丝管理
- 素材管理
**数据表**:
- 微信配置表
- 菜单表
- 消息记录表
- 粉丝表
- 素材表
---
### ThinkPlugsWechatService
**包名**: `zoujingli/think-plugs-wechat-service`
**定位**: 微信公众号开放平台(第三方平台托管)
**命名空间**: `plugin\wechat\service\`
**访问前缀**: `wechat-service`
**核心功能**:
- 第三方平台授权
- 组件配置管理
- 代公众号实现业务
- JSON-RPC 接口
**数据表**:
- 第三方授权表
- 组件配置表
- 预授权码表
---
## 业务插件
### ThinkPlugsAccount
**包名**: `zoujingli/think-plugs-account`
**定位**: 多端账号体系管理
**命名空间**: `plugin\account\`
**访问前缀**: `account`
**许可证**: VIP 授权
**数据表**:
- 用户账号表
- 终端绑定表
- 短信记录表
- 其他账号相关表
**菜单**:
- 用户管理
- 用户账号管理
- 终端账号管理
- 手机短信管理
**依赖**:
- ThinkLibrary
- ThinkPlugsSystem
- ThinkPlugsWechatClient
---
### ThinkPlugsPayment
**包名**: `zoujingli/think-plugs-payment`
**定位**: 支付中心
**命名空间**: `plugin\payment\`
**访问前缀**: `payment`
**许可证**: VIP 授权
**数据表**:
- 支付配置表
- 交易记录表
- 退款记录表
- 余额明细表
- 积分明细表
**菜单**:
- 支付管理
- 支付配置管理
- 支付行为管理
- 支付退款管理
- 余额明细管理
- 积分明细管理
**依赖**:
- ThinkLibrary
- ThinkPlugsSystem
- ThinkPlugsWorker
- ThinkPlugsAccount
---
### ThinkPlugsWemall
**包名**: `zoujingli/think-plugs-wemall`
**定位**: 分销商城系统
**命名空间**: `plugin\wemall\`
**访问前缀**: `wemall`
**许可证**: VIP 授权
**数据表**:
- 商品表
- 订单表
- 用户表
- 会员等级表
- 代理等级表
- 物流表
- 其他商城相关表
**菜单**:
- 商城配置
- 数据统计报表
- 系统通知管理
- 商城参数管理
- 推广海报管理
- 店铺页面装修
- 快递公司管理
- 邮费模板管理
- 用户管理
- 会员等级管理
- 会员折扣方案
- 会员用户管理
- 创建会员用户
- 用户余额充值
- 商城管理
- 商品数据管理
- 订单数据管理
- 订单发货管理
- 售后订单管理
- 商品评论管理
- 代理管理
- 代理等级管理
- 代理返佣管理
- 代理提现管理
- 帮助咨询
- 常见问题管理
- 意见反馈管理
**依赖**:
- ThinkLibrary
- ThinkPlugsSystem
- ThinkPlugsAccount
- ThinkPlugsPayment
---
### ThinkPlugsWuma
**包名**: `zoujingli/think-plugs-wuma`
**定位**: 一物一码与防伪溯源系统
**命名空间**: `plugin\wuma\`
**访问前缀**: `wuma`
**许可证**: VIP 授权
**数据表**:
- 防伪码表
- 溯源记录表
- 其他相关表
**依赖**:
- ThinkLibrary
- ThinkPlugsSystem
- ThinkPlugsWorker
- ThinkPlugsWemall
---
## 插件依赖关系图
```
ThinkLibrary (核心基础)
├─► ThinkPlugsSystem (系统后台)
│ │
│ ├─► System 内置存储中心 (system_file / upload)
│ ├─► ThinkPlugsWorker (运行时)
│ └─► System 内置 Helper 工具 (plugin\system\helper\*)
├─► ThinkPlugsWechatClient (公众号)
└─► ThinkPlugsWechatService (开放平台)
业务插件依赖:
┌─────────────────────────────────────┐
│ ThinkPlugsAccount (账号) │
│ 依赖System, WechatClient │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ ThinkPlugsPayment (支付) │
│ 依赖Account, System, Worker │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ ThinkPlugsWemall (商城) │
│ 依赖Account, Payment, System │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ ThinkPlugsWuma (一物一码) │
│ 依赖Wemall, System, Worker │
└─────────────────────────────────────┘
```
---
## 插件开发标准
### 目录规范
每个插件必须遵循以下目录结构:
```
plugin-name/
├── src/
│ ├── controller/ # 控制器(必需)
│ ├── model/ # 模型(可选)
│ ├── service/ # 服务(必需)
│ │ └── Service.php # 服务注册入口
│ ├── view/ # 视图(可选)
│ ├── lang/ # 语言包(可选)
│ ├── route/ # 路由(可选)
│ ├── middleware/ # 中间件(可选)
│ ├── command/ # CLI 命令(可选)
│ └── common.php # 全局函数(可选)
├── stc/
│ ├── config/ # 配置发布目录
│ ├── database/ # 数据库迁移
│ └── ... # 其他发布资源
├── tests/ # 单元测试
├── composer.json # Composer 配置
├── readme.md # 插件说明
└── readme.api.md # 接口与参数说明
```
### Composer 配置标准
```json
{
"type": "think-admin-plugin",
"name": "zoujingli/think-plugs-{name}",
"autoload": {
"psr-4": {
"plugin\\{name}\\": "src"
}
},
"extra": {
"think": {
"services": ["plugin\\{name}\\Service"]
},
"xadmin": {
"app": {
"code": "{name}",
"name": "{Name}",
"prefix": "{prefix}"
},
"menu": { ... },
"migrate": { ... }
}
}
}
```
### 服务注册标准
运行时插件的 `src/Service.php` 统一继承 `think\admin\Plugin`;纯命令或辅助工具组件可继续继承 `think\Service`
运行时插件服务示例:
```php
<?php
namespace plugin\{name};
use think\admin\Plugin;
class Service extends Plugin
{
public function boot(): void
{
// 插件启动逻辑
}
public function register(): void
{
// 插件注册逻辑
}
}
```
### 接口文档标准
- HTTP 插件必须在根目录 `readme.api.md` 中说明标准 JSON 响应结构
- 文档中的 `code` 必须使用 `200/401/403/404/500` 语义,不再使用 `1/0`
- 前端与调用方只能以 `code === 200` 视为成功,其他状态码按对应业务语义处理
### 菜单元数据标准
菜单配置在 `composer.json``extra.xadmin.menu` 中:
```json
{
"menu": {
"show": true,
"root": {
"name": "菜单根名称",
"sort": 100
},
"items": [
{
"name": "一级菜单",
"subs": [
{
"name": "二级菜单",
"icon": "layui-icon xxx",
"node": "plugin/controller/action"
}
]
}
]
}
}
```
### 迁移元数据标准
迁移配置在 `composer.json``extra.xadmin.migrate` 中:
```json
{
"migrate": {
"file": "20241010000001_install_{name}20241010.php",
"class": "Install{Name}20241010",
"name": "{Name}Plugin"
}
}
```
---
## 插件测试标准
每个插件必须包含单元测试:
```php
<?php
namespace plugin\{name}\tests;
use PHPUnit\Framework\TestCase;
class PluginTest extends TestCase
{
public function testPluginExists(): void
{
$this->assertTrue(class_exists('plugin\\{name}\\Service'));
}
}
```
运行测试:
```bash
vendor/bin/phpunit --filter PluginTest
```
---
## 插件发布流程
### 发布配置
```bash
# 显式执行完整安装链路
php think xadmin:install
# 发布所有插件配置
php think xadmin:publish
# 发布并执行全部已发布迁移
php think xadmin:publish --migrate
```
### 发布流程
1. `zoujingli/think-plugs-install` 作为 Composer plugin`composer install / update / remove / dump-autoload` 后自动接管安装链路
2. 先执行 `service:discover`,再读取各插件 `composer.json``extra.xadmin.publish.copy` 规则
3. 按规则同步配置、骨架和静态资源;目标路径前加 `!` 时单项强制覆盖,结构化规则可通过 `exclude` 跳过目录内文件
4. 同步 `stc/database/``database/migrations/`
5. 首次 Composer 安装只执行发布,不直接建表;后续只有声明了 `extra.xadmin.migrate` 的变更插件,才会自动执行数据库迁移;未声明时只输出提示
6. 记录资源发布状态到 `vendor/.published.json`,记录安装快照到 `vendor/.plugin-state.json`,记录迁移发布状态到 `database/migrations/.published.json`
---
## 插件卸载说明
**重要提示**: 插件卸载通常不会自动删除:
- 已执行的数据库迁移
- 历史业务数据
- 已发布的配置文件
如需完全卸载,需要:
1. 手动回滚数据库迁移
2. 手动删除业务数据
3. 手动清理配置文件