Appearance
插件系统概述
MineShop 采用 Hyperf 的 ConfigProvider 机制实现插件系统,支持热插拔、配置合并、自动注册等特性。
🎯 插件架构
plugins/
├── export-center/ # 导出中心插件
│ ├── src/
│ │ ├── ConfigProvider.php # 插件配置提供者
│ │ ├── Controller/ # 控制器
│ │ ├── Service/ # 服务层
│ │ ├── Process/ # 进程
│ │ └── Writer/ # 导出写入器
│ ├── web/ # 前端资源
│ └── composer.json
├── wechat/ # 微信插件
└── ...✨ 核心特性
1. ConfigProvider 机制
每个插件通过 ConfigProvider 类声明配置:
php
// plugins/export-center/src/ConfigProvider.php
class ConfigProvider
{
public function __invoke()
{
return [
// 注解扫描路径
'annotations' => [
'scan' => [
'paths' => [__DIR__],
],
],
// 异步队列配置(自动合并)
'async_queue' => [
'export' => [
'driver' => RedisDriver::class,
'channel' => '{export-queue}',
'handle_timeout' => 600,
'processes' => 1,
'concurrent' => ['limit' => 5],
],
],
// 自定义进程
'processes' => [
ExportConsumerProcess::class,
],
];
}
}2. 配置自动合并
插件配置会自动与主应用配置合并,无需手动修改 config/autoload/*.php:
php
// 主应用 async_queue.php
return [
'default' => [...],
];
// 插件 ConfigProvider 中的 async_queue
'async_queue' => [
'export' => [...],
]
// 最终合并结果
[
'default' => [...],
'export' => [...], // 自动合并
]3. 前端资源集成
插件可包含前端资源,通过 web/index.ts 导出:
typescript
// plugins/export-center/web/index.ts
export default {
name: 'export-center',
routes: [...],
menus: [...],
}📦 已有插件
| 插件 | 说明 | 文档 |
|---|---|---|
| export-center | 通用导出中心 | 查看 |
| 微信集成 | 查看 |
🔧 插件开发
目录结构
my-plugin/
├── src/
│ ├── ConfigProvider.php # 必需:配置提供者
│ ├── Controller/ # 可选:控制器
│ ├── Service/ # 可选:服务
│ └── ...
├── web/ # 可选:前端资源
├── composer.json # 必需:包定义
└── README.md # 推荐:说明文档composer.json 示例
json
{
"name": "mineshop/my-plugin",
"type": "library",
"autoload": {
"psr-4": {
"Plugin\\MyPlugin\\": "src/"
}
},
"extra": {
"hyperf": {
"config": "Plugin\\MyPlugin\\ConfigProvider"
}
}
}⚠️ 注意事项
- 命名空间: 插件使用
Plugin\{PluginName}命名空间 - 配置冲突: 避免与主应用配置键名冲突
- 依赖管理: 在 composer.json 中声明依赖
- 版本兼容: 注意与主应用版本兼容性