插件注册服务
ThinkAdmin 插件机制是基于 ThinkPHP 服务层完成的插件初始化,可以把每个插件看成 ThinkPHP 的一个独立子应用,所以在开发时可以将插件当成一个普通模块开发,唯一区别在于模块使用 sys.php
全局初始化模块,而插件在 Service
类完成全局初始化。 为了保证插件配置信息完整,每个插件必需要包含 composer.json
配置文件和插件服务 Service
注册类。
插件的三种类型
- 本地插件,插件直接放置在本地某个目录,其根目录需要包含 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"
},
"autoload": {
"psr-4": {
"app\\admin": "src"
}
},
"repositories": {
"ThinkAdminPlugs": {
"type": "path",
"url": "../think-plugs-admin"
}
}
}
2. 开放插件特性:
将应用插件发布到 Composer 平台,使用 composer require plugs-package-name
安装。
3. 私有插件特性:
私有插件与线上插件一致,区别在于发布的平台不同,后期会针对此类型详细描述!
插件的配置参数
应用插件 composer.json
具体配置参数如下:
- 插件类型 ( 固定的 ):think-admin-plugin
- 插件名称 ( 自定义 ):zouingli/think-plugs-admin
- 插件信息 ( 自定义 ):可选,配置插件基本信息,展示在插件说明
- 安装配置 ( 自定义 ):可选,支持安装的规则请阅读《插件安装规则》
- 插件服务 ( 自定义 ):需要继承
think\admin\Plugin
并在composer.json
里面注册;
{
"type": "think-admin-plugin",
"name": "zoujingli/think-plugs-admin",
"extra": {
"config": {
"name": "可选,插件中文名称",
"cover": "可选,插件的封面图片,仅支持 https 协议的图片链接",
"document": "可选,插件的文档链接,仅支持 http 或 https 协议的链接",
"platforms": "可选,插件支持的平台,如:['wxapp','wxweb','h5wap','h5web']",
"description": "可选,插件的中文描述,简短的描述此插件的用途或作用"
},
"plugin": {
// 插件安装规则
},
"think": {
"services": [
"app\\admin\\Service"
]
}
}
}
插件服务注册类
插件的服务类需要继承 \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 $appCopy = 'app/admin';
/**
* 定义安装包名称
* @var string
*/
protected $package = 'zoujingli/think-plugs-admin';
/**
* 定义插件中心菜单
* @return array
*/
public static function menu(): array
{
return [];
}
}