插件注册服务

ThinkAdmin 插件机制是基于 ThinkPHP 服务层完成的插件初始化,可以把每个插件看成 ThinkPHP 的一个独立子应用,所以在开发时可以将插件当成一个普通模块开发,唯一区别在于模块使用 sys.php 全局初始化模块,而插件在 Service 类完成全局初始化。 为了保证插件配置信息完整,每个插件必需要包含 composer.json 配置文件和插件服务 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"
  },
  "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 [];
    }
}
Last Updated:
Contributors: 邹景立