插件注册服务
ThinkAdmin 插件机制已得到进一步的优化,该机制基于 ThinkPHP 的服务层,使得每个插件能够像独立的子应用一样运作。这种设计让开发者在开发插件时能够像处理普通模块一样轻松自如。尽管插件与普通模块在结构上有所相似,但它们在初始化方面存在关键差异。普通模块使用 sys.php
进行全局初始化,而插件则依赖 Service 类来完成全局初始化过程。
为了确保插件配置信息的完整性和准确性,系统引入了强制性的要求:每个插件都必须包含 composer.json
配置文件和插件服务 Service 注册类。composer.json
文件用于描述插件的元数据、依赖关系以及其他配置信息,它是 Composer 包管理器的标准配置文件,有助于自动化管理插件的依赖和安装。而插件服务 Service 注册类则负责插件的初始化逻辑,确保插件能够正确集成到 ThinkAdmin 系统中。
通过这些优化措施,系统进一步提高了 ThinkAdmin 插件机制的灵活性和可扩展性。开发者可以更加便捷地创建、配置和管理插件,从而加速应用的开发和部署过程。同时,插件的完整性和规范性也得到了有效保障,提升了系统的稳定性和可维护性。
插件的三种类型
- 本地插件,插件直接放置在本地某个目录,其根目录需要包含 composer.json 文件;
- 开放插件,将插件发布到 Composer 管理平台,通过
composer require vendor/package
安装; - 私有插件,将插件上传到 ThinkAdmin 专属平台,通过插件中心登录生成 token,同上面的安装方式 ( 未上线 );
1. 本地插件特性
本地插件是基于 Composer
的 repositories.type
为 path
实现,参数 url
指向到插件根目录。
项目根 composer.json
配置 repositories
对象并设置插件所在位置,本地插件必需指定版本号为 dev-master
或其他开发分支。
注意事项:
- 需要在插件的
composer.json
配置autoload
自动加载规则,否则无法实现自动加载Class
类; - 本地插件不建议使用
ThinkAdmin
插件的自毁机制 (clear
),有可能造成原插件目录被意外删除;
以下项目根 composer.json
的配置案例中 zoujingli/think-plugs-admin
为插件包名,需要替换为你自己的包名。
{
"type": "project",
"require": {
"zoujingli/think-plugs-admin": "dev-master"
},
"repositories": {
"ThinkAdminPlugs": {
"type": "path",
"url": "../think-plugs-admin"
}
},
"autoload": {
"psr-0": {
"": "extend"
},
"psr-4": {
"app\\": "app"
}
}
}
2. 开放插件特性:
将应用插件发布到 Composer 平台,使用 composer require plugs-package-name
安装。
3. 私有插件特性:
私有插件与线上插件一致,区别在于发布的平台不同,后期会针对此类型详细描述!
插件的配置参数
应用插件 composer.json
具体配置参数如下:
- 插件类型 ( 固定的 ):think-admin-plugin
- 插件名称 ( 自定义 ):zouingli/think-plugs-admin
- 插件信息 ( 自定义 ):可选,配置插件基本信息,展示在插件说明
- 安装配置 ( 自定义 ):可选,支持安装的规则请阅读《插件安装规则》
- 插件服务 ( 自定义 ):需要继承
think\admin\Plugin
并在composer.json
里面注册; - 如果是本地插件且未发布到线上,需要增加
version:"dev-master"
配置;
{
"type": "think-admin-plugin",
"name": "zoujingli/think-plugs-admin",
"version": "dev-master",
"extra": {
"config": {
"type": "module",
"name": "可选,插件中文名称",
"cover": "可选,插件的封面图片,仅支持 https 协议的图片链接",
"document": "可选,插件的文档链接,仅支持 http 或 https 协议的链接",
"platforms": "可选,插件支持的平台,如:['wxapp','wxweb','h5wap','h5web']",
"description": "可选,插件的中文描述,简短的描述此插件的用途或作用"
},
"plugin": {
"copy": {
"stc/database": "database/migrations"
}
},
"think": {
"services": [
"app\\admin\\Service"
]
}
},
"autoload": {
"psr-4": {
"app\\admin": "src"
}
}
}
插件服务注册类
插件的服务类需要继承 \think\admin\Plugin
类,实现读取菜单的 menu()
方法;
在插件的服务类里面,可以配置插件的资源所在目录,插件发布的包名,插件访问的别名等;
declare(strict_types=1);
namespace app\admin;
use think\admin\Plugin;
/**
* 插件服务注册
* Class Service
* @package app\admin
*/
class Service extends Plugin
{
/**
* 定义安装包名称
* @var string
*/
protected $package = 'zoujingli/think-plugs-admin';
/**
* 定义插件中心菜单
* @return array
*/
public static function menu(): array
{
return [];
}
}