# 插件开发 插件是SwiftAdmin生态中重要的一环,在SwiftAdmin中完整应用和普通插件统一称为插件,开发者可以自由的在后台管理 `插件管理` 中对插件进行安装、禁用、卸载等操作。 ### 插件开发者 如果你是SwiftAdmin插件开发者,请直接阅读[SwiftAdmin开发者文档](https://doc.swiftadmin.net/developer),有更详细的插件开发文档 ### 常见问题 1. 并不是所有应用插件都有后台管理菜单,部分插件只实现相应的插件功能,例如:短信、云存储类别等插件。 2. 如果安装卸载插件后不生效,请尝试在后台右上角清除缓存和清除浏览器缓存后重试。 3. 如果你采用了自建CDN和云存储部署 `static` 目录,你安装卸载插件后需要同步 `static` 目录到你的云存储。 4. 目前SwiftAdmin插件系统只支持在线安装,不支持本地离线安装,出于对插件开发者权益的考虑,后期也不会开发离线模式!## 插件目录 SwiftAdmin中的每一个插件,都是一个独立的文件夹,所有的应用插件都存在于根目录下的 `plugin` 文件夹下。 以下是一个演示插件的目录结构: ``` demo ├── app // 此文件夹中所有文件会覆盖到根目录的/app文件夹 ├── public // 此文件夹中所有文件会覆盖到根目录的/public文件夹 ├── Demo.php // 此文件为插件核心安装卸载控制器,必需存在 ├── config.json // 插件配置文件,我们在后台插件管理中点配置按钮时配置的文件,必需存在 ├── config.html // 插件配置模板,如不存在则无配置项 ├── plugin.js // 全局插件JS代码,自动加载到顶级index模板,也就是app/admin/index/index的模板之中 ├── function.php // 全局的插件函数文件 ├── Upgrade.php // 插件升级文件 ├── install.sql // 插件数据库安装文件,此文件仅在插件安装时会进行导入[需要自行导入] ├── uninstall.sql // 插件数据库卸载文件[如果有数据库尽量设置数据库表,已达到正确卸载的目的] ├── LICENSE // 版权文件 ``` 其中 `app` 和 `public` 文件夹会覆盖到根目录,这两个文件夹主要用于我们后台管理功能的开发,我们可以先在后台开发好对应的管理功能后, 再将对应的功能打包进插件即可,在插件安装和卸载时会自动进行文件冲突检测,如果遇到冲突的文件会提醒用户是否进行覆盖或删除。 `Demo.php` 这个文件是插件的核心文件,我们可以在这个文件中编写插件安装或卸载时执行的脚本,或者在此插件中编写菜单的生成或删除, 同时插件的行为方法也是编写在此文件中的,插件所支持的行为事件会在后面讲到。此文件命令规则为插件目录名称首字母大写。 `config.html` 这个文件是插件配置的模板文件,我们在后台插件管理中点 `配置` 按钮时会调用该模板文件进行渲染,如果不存在该模板文件,将调用框架自带的配置模板进行渲染。 `config.json` 这个文件是插件的配置文件,我们在后台插件管理中点 `配置` 按钮时会保存在此文件,此文件的内容格式为: ## 配置文件 ``` { "name": "demo", "title": "测试插件", "intro": "这是一个测试插件!", "author": "官方", "home": "https:\/\/www.swiftadmin.net", "version": "1.0.1", "status": 1, "extends": { "title": "这里是扩展配置信" }, "rewrite": { "\/demo1": "demo\/demo", // 如需要伪静态,请将控制器大小写填写正确 "\/demo2": "index\/list", "\/demo3": "index\/query" }, "area": [ "600px", "650px" ], "auto": true, "config": 1, } ``` ## 插件菜单 ---- ``` $menu = [ [ 'title' => '测试插件', 'router' => '/command/index', // 如果你当前菜单下存在子菜单,那么请将路由设置为# // 请参考控制台 数据库表 'icons' => 'layui-icon-app', 'auth' => '1', // 是否鉴权 'children' => [ ['router' => '/command/index', 'title' => '查看'], ['router' => '/command/add', 'title' => '添加'], ['router' => '/command/detail', 'title' => '详情'], ['router' => '/command/execute', 'title' => '运行'], ['router' => '/command/del', 'title' => '删除'], ['router' => '/command/multi', 'title' => '批量更新'], ] ] ]; // 二级菜单设置 [ 'title' => '测试插件2', 'router' => '#', 'icons' => 'layui-icon-app', 'auth' => '1', 'children' => [ [ 'router' => '/fenlei1/index', 'title' => '分类1', 'children'=> [ ['router' => '/fenlei1/add', 'title' => '添加'], ['router' => '/fenlei1/detail', 'title' => '详情'], ['router' => '/fenlei1/execute', 'title' => '运行'], ['router' => '/fenlei1/del', 'title' => '删除'], ['router' => '/fenlei1/multi', 'title' => '批量更新'], ], ], [ 'router' => '/fenlei2/index', 'title' => '分类2', 'children'=> [ ['router' => '/fenlei2/add', 'title' => '添加'], ['router' => '/fenlei2/detail', 'title' => '详情'], ['router' => '/fenlei2/execute', 'title' => '运行'], ['router' => '/fenlei2/del', 'title' => '删除'], ['router' => '/fenlei2/multi', 'title' => '批量更新'], ], ], ] ], ``` ## 前台菜单 前台菜单请自行编写menu.html文件,将他放在插件目录->data文件夹下,内容格式为: ``` <li class="layui-nav-item"> <a class="#" lay-href="/demo/index">演示插件</a> </li> ``` 这时候访问前台用户中心,可以看到一个演示插件的菜单,可以编写前台的交互页面!! ## 插件服务 插件服务需要自行进行注册,你可以在插件根目录建立service.php,并在自己插件的启用和关闭的时候, 修改vendor目录下的service.php文件进行自动加载!服务文件的编写规则请参考thinkphp官方代码! ## 数据库表 `install.sql` 这个文件中只能是SQL语句,同时在此文件中可以使用 `__PREFIX__` 表示数据库表前缀,插件在安装导入SQL时自动进行替换。此文件的内容格式为 `uninstall.sql` 数据库文件,在卸载插件的时候会用到,如果不存在这个SQL文件,则在卸载的时候将不会清理掉数据库 ``` /* Navicat Premium Data Transfer Source Server : localhost_3306 Source Server Type : MySQL Source Server Version : 50726 Source Host : localhost:3306 Source Schema : swiftadmin Target Server Type : MySQL Target Server Version : 50726 File Encoding : 65001 Date: 23/03/2021 20:44:01 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for __PREFIX__demo -- ---------------------------- DROP TABLE IF EXISTS `__PREFIX__demo`; CREATE TABLE `__PREFIX__demo` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标题', `update_time` int(11) NULL DEFAULT NULL COMMENT '更新时间', `create_time` int(11) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'demo插件数据表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of __PREFIX__demo -- ---------------------------- INSERT INTO `__PREFIX__demo` VALUES (1, 'demo插件', 1602812266, 1602812266); SET FOREIGN_KEY_CHECKS = 1; ``` 更新于 2026-08-09 15:13 阅读 5 ← 代码生成 插件钩子 → 相关问题 插件钩子 插件管理