插件开发 6 更新于 2026-10-13

插件开发 · 目录结构

插件(源码 / 扩展)放在项目根目录的 addons/ 下,每个插件一个文件夹。

一、目录规范

addons/
└── myplugin/
    ├── info.ini              插件清单(必需)
    ├── config.php            插件配置字段定义
    ├── Myplugin.php          插件入口类(必需,类名 = 目录名首字母大写)
    ├── install/
    │   ├── install.sql       安装时执行(可选)
    │   ├── uninstall.sql     卸载时执行(可选)
    │   └── app/              随插件分发的前台/后台代码(安装时复制)
    ├── admin/                后台控制器与视图
    │   ├── controller/
    │   └── view/
    ├── controller/           前台控制器(可选)
    ├── view/                 前台视图(可选)
    ├── static/               静态资源(安装时复制到 public/addons/myplugin/)
    └── README.md

二、info.ini

name = myplugin
title = 我的插件
intro = 一句话介绍这个插件能做什么
author = 你的名字
version = 1.0.0
require = 1.0.0
键说明
name插件标识,必须与目录名一致
title中文名称,显示在后台列表
intro简介
author作者
version版本号,用于升级比较
require要求的最低 CMS 版本

三、入口类

<?php
namespace addons\myplugin;

use think\Addons;

class Myplugin extends Addons
{
    /** 插件安装 */
    public function install()
    {
        return true;
    }

    /** 插件卸载 */
    public function uninstall()
    {
        return true;
    }

    /** 注册后台菜单与权限节点 */
    public function menu()
    {
        return [
            [
                'name'  => '我的插件',
                'icon'  => 'fa-solid fa-plug',
                'url'   => 'myplugin/index/index',
                'child' => [
                    ['name' => '设置', 'url' => 'myplugin/index/config'],
                ],
            ],
        ];
    }
}

四、config.php

<?php
return [
    [
        'name'    => 'api_key',
        'title'   => '接口密钥',
        'type'    => 'text',
        'value'   => '',
        'tip'     => '在服务商后台获取',
        'rule'    => 'require',
    ],
    [
        'name'    => 'switch_on',
        'title'   => '启用功能',
        'type'    => 'switch',
        'value'   => '1',
    ],
];

后台会自动渲染成设置表单,值存入 ws_addon_config。

读取配置:

use think\facade\Config;
$key = Config::get('addons.myplugin.api_key');

五、安装机制

安装插件时程序会:

  1. 校验 info.ini 与入口类是否存在
  1. 执行 install/install.sql(如有)
  1. 把 install/app/ 下的内容复制到应用目录(用于需要注册独立控制器的插件)
  1. 把 static/ 复制到 public/addons/<name>/
  1. 注册菜单与权限节点
  1. 写入 ws_addon 记录并标记为已安装

卸载时反向执行:执行 uninstall.sql、移除菜单与权限节点、删除 public/addons/<name>/,但保留用户数据(除非插件显式声明删除)。

六、打包与发布

cd addons/myplugin
zip -r ../myplugin-1.0.0.zip . -x "*.git*" "*.DS_Store"

要点:

  • zip 产物必须放在插件目录外面,否则会把自己再打进去
  • 不要包含 pycache、.git、编辑器临时文件
  • 上传到官网「开发者中心 → 发布应用」,分类选「功能扩展 / 编辑器 / 支付网关 …」

打包与发布全流程见 开发者中心与上架流程

下一页