插件注册服务

ThinkAdmin 插件机制已得到进一步的优化,该机制基于 ThinkPHP 的服务层,使得每个插件能够像独立的子应用一样运作。这种设计让开发者在开发插件时能够像处理普通模块一样轻松自如。尽管插件与普通模块在结构上有所相似,但它们在初始化方面存在关键差异。普通模块使用 sys.php 进行全局初始化,而插件则依赖 Service 类来完成全局初始化过程。

为了确保插件配置信息的完整性和准确性,系统引入了强制性的要求:每个插件都必须包含 composer.json 配置文件和插件服务 Service 注册类。composer.json 文件用于描述插件的元数据、依赖关系以及其他配置信息,它是 Composer 包管理器的标准配置文件,有助于自动化管理插件的依赖和安装。而插件服务 Service 注册类则负责插件的初始化逻辑,确保插件能够正确集成到 ThinkAdmin 系统中。

通过这些优化措施,系统进一步提高了 ThinkAdmin 插件机制的灵活性和可扩展性。开发者可以更加便捷地创建、配置和管理插件,从而加速应用的开发和部署过程。同时,插件的完整性和规范性也得到了有效保障,提升了系统的稳定性和可维护性。

插件的三种类型

  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 [];
    }
}
Last Updated:
Contributors: 邹景立