🔌 插件注册服务

ThinkAdmin 提供完善的插件注册服务机制,基于 ThinkPHP 的服务层,使每个插件能够像独立的子应用一样运作。

🚀 主要功能

  • 独立运行: 每个插件像独立的子应用一样运作
  • 服务层集成: 基于 ThinkPHP 服务层机制
  • 自动初始化: 通过 Service 类完成全局初始化
  • 配置管理: 支持 composer.json 配置文件
  • 依赖管理: 自动管理插件依赖关系
  • 灵活扩展: 提供灵活的插件扩展机制

📋 插件类型

1. 本地插件

  • 存储方式: 直接放置在本地目录
  • 配置文件: 根目录需要包含 composer.json 文件
  • 版本要求: 必需指定版本号为 dev-master 或其他开发分支
  • 自动加载: 需要配置 autoload 自动加载规则

2. 开放插件

  • 发布平台: 发布到 Composer 管理平台
  • 安装方式: 通过 composer require vendor/package 安装
  • 版本管理: 支持版本控制和更新管理
  • 依赖解析: 自动解析和安装依赖

3. 私有插件

  • 专属平台: 上传到 ThinkAdmin 专属平台
  • Token 认证: 通过插件中心登录生成 token
  • 安装方式: 与开放插件相同的安装方式
  • 状态: 目前未上线

⚙️ 配置要求

必需文件

  • composer.json: 插件元数据和依赖配置
  • Service 类: 插件服务注册类
  • 自动加载: 配置 autoload 自动加载规则

初始化机制

  • 普通模块: 使用 sys.php 进行全局初始化
  • 插件模块: 依赖 Service 类完成全局初始化
  • 服务注册: 通过 Service 类注册插件服务

插件的三种类型

  1. 本地插件,插件直接放置在本地某个目录,其根目录需要包含 composer.json 文件;
  2. 开放插件,将插件发布到 Composer 管理平台,通过 composer require vendor/package 安装;
  3. 私有插件,将插件上传到 ThinkAdmin 专属平台,通过插件中心登录生成 token,同上面的安装方式 ( 未上线 );
1. 本地插件特性

本地插件是基于 Composerrepositories.typepath 实现,参数 url 指向到插件根目录。

项目根 composer.json 配置 repositories 对象并设置插件所在位置,本地插件必需指定版本号为 dev-master 或其他开发分支。

注意事项:

  1. 需要在插件的 composer.json 配置 autoload 自动加载规则,否则无法实现自动加载 Class 类;
  2. 本地插件不建议使用 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 [];
    }
}
最近更新:
Contributors: 邹景立