关于xbCode接口

1. AdminApi 管理员登录接口 😃

1. 类作用说明

AdminApi 专门负责「管理员账号登录」逻辑,包括验证码校验、账号密码验证、状态检查、登录信息更新以及登录令牌生成。

2. 核心功能介绍

  • 支持图形验证码登录(可配置是否开启)
  • 校验用户名、密码是否正确
  • 检查管理员账号是否被冻结
  • 记录登录 IP 和时间
  • 生成登录 Token,并写入当前请求上下文(uid、username、user)

3. 使用示例

use plugin\xbCode\api\AdminApi;

try {
    $loginData = AdminApi::username('admin', '123456', 'abcd'); // 验证码可为空
    // $loginData 一般包含 token 等登录信息,返回给前端
} catch (\Exception $e) {
    // 登录失败,返回错误提示
    return json(['code' => 0, 'msg' => $e->getMessage()]);
}

4. 关键方法说明

  • public static function username(string $username, string $password, ?string $captcha = null)

5. 注意事项 ⚠️

  • 启用验证码前,需要正确安装并配置 Webman\Captcha\CaptchaBuilder 插件
  • 密码是通过 PasswdUtil 生成的摘要,与数据库中加密后的密码匹配,不能直接对比明文
  • 抛出的异常信息直接是面向前端的提示,可在上层统一格式化输出


2. AdminAuthApi 管理员权限接口 🔐

1. 类作用说明

AdminAuthApi 当前是一个权限校验的预留接口类,用于检查管理员是否对某个 URL 有操作权限。

2. 核心功能介绍

  • 统一的权限判断入口 Authentication()(目前实现为永远返回 true)

3. 使用示例

use plugin\xbCode\api\AdminAuthApi;

$auth = AdminAuthApi::make();
if (! $auth->Authentication($roleId, 'app/xbCode/admin/User/index')) {
    throw new \Exception('您没有权限访问该页面');
}

4. 关键方法说明

  • public static function make()
  • public function Authentication(int $roleId, string $url)

5. 注意事项 ⚠️

  • 目前该类没有真实权限校验逻辑,如要依赖权限控制,需要自行扩展实现
  • 推荐在控制器里封装一层,避免直接依赖当前「全通过」实现


3. AppEntry 后台入口配置聚合器 🧩

1. 类作用说明

AppEntry 用于聚合后台管理前端(如 Vue/React SPA)的「初始化配置数据」,包含系统信息、备案信息、登录页配置、公共 API、通用视图、上传接口、编辑器上传接口以及远程组件等。前端通常通过一个接口一次性拿到这些配置。

2. 核心功能介绍

  • 从配置中心(ConfigApi)读取系统基础配置
  • 解析网站备案/组织信息并替换模板变量(如 {WEB_NAME}
  • 组织登录页相关展示信息:标题、描述、背景图等
  • 提供通用 API 地址(如登录、获取菜单、退出登录等)
  • 提供通用视图地址(如用户中心、工作台、工具栏)
  • 内置与 xbUpload 插件对接的上传分类接口、附件接口、编辑器上传接口
  • 允许扩展远程组件列表

3. 使用示例

use plugin\xbCode\api\AppEntry;

$appEntry = AppEntry::make();
$data = $appEntry->get();

// 控制器中直接返回给前端
return json([
    'code' => 1,
    'data' => $data,
]);

或者自定义部分配置:

$appEntry = AppEntry::make()
    ->otherLogin([
        ['title' => '微信登录', 'icon' => 'wechat', 'url' => 'https://xxx/wechat/login'],
    ])
    ->loginData([
        'login_title' => '管理后台登录',
        'bg'          => '/static/admin/login-bg.jpg',
    ]);

4. 关键方法说明

  • public static function make()
  • public function system(array $config = [])
  • public function webIcp(array $config = [])
  • public function publicApi(array $config = [])
  • public function publicView(array $config = [])
  • uploadCateApi / uploadApi / editorUploadApi
  • public function get()

5. 注意事项 ⚠️

  • 依赖 ConfigApiUrlPluginsApixbUpload 等多处组件,使用前需保证这些插件/配置存在
  • 若有自定义前端登录页或布局,优先在插件 config/xbcode.php 中配置相应视图地址
  • 该类实现了 JsonSerializable,可以直接 json_encode($appEntry) 得到配置


4. Composer 依赖安装助手 📦

1. 类作用说明

Composer 用来统一安装各插件在 plugins.json 中声明的 Composer 依赖包,方便一键安装/修复依赖。

2. 核心功能介绍

  • 扫描所有插件或指定插件的 plugins.json,收集 composer 字段下的依赖
  • 检查依赖对应的类是否已经存在,避免重复安装
  • 通过系统 composer 命令执行 composer require 安装
  • 安装过程中的信息通过 LogApi 输出到控制台与日志文件

3. 使用示例

use plugin\xbCode\api\Composer;

// 安装所有插件声明的 composer 依赖
Composer::install();

// 只安装某个插件(如 xbPay)的 composer 依赖
Composer::install('xbPay');

4. 关键方法说明

  • public static function install(string $name = '')
  • private static function getComposerPackages(string $name = '')
  • private static function installComposerPackage(string $package)

5. 注意事项 ⚠️

  • 服务端必须安装 Composer,并允许 CLI 执行
  • shell_execexec 不能被 PHP 禁用,否则会抛出异常
  • 安装命令在生产环境执行要注意安全与超时问题


5. ConfigApi 配置读写接口 ⚙️

1. 类作用说明

ConfigApi 为系统及插件各模块提供「统一的配置读写接口」,支持:

  • 按分组读写配置
  • 缓存配置到 Cache
  • 支持层级配置(点号语法)
  • 自动处理附件路径(与 xbUpload 对接)
  • 自动解析 JSON 字符串为数组

2. 核心功能介绍

  • 基于 plugin\xbCode\app\model\Config 操作配置表
  • 通过缓存减少数据库查询
  • 支持 group/namegroup.name 风格
  • 支持一次读取多个配置键(通过逗号分隔)
  • 支持把 attachment/xxx 路径转换为完整 URL

3. 使用示例

读取单个配置:

use plugin\xbCode\api\ConfigApi;

// 获取 system 分组下的 web_name
$webName = ConfigApi::make('system')->get('web_name', '默认站点');

读取整个分组并解析为层级数组:

$config = ConfigApi::make('qcloud')->level(true)->get('');
// 如可通过 $config['sms']['appid'] 访问

保存配置:

ConfigApi::make('system')->set([
    'web_name' => '新站点名称',
    'logo'     => 'attachment/2025/01/logo.png', // 自动转为存储路径
]);

4. 关键方法说明

  • 构造与实例化:
  • 缓存相关:
  • 层级控制:
  • 读取配置:
  • 写入配置:

5. 注意事项 ⚠️

  • 使用前需确保 Config 表结构与 group/name/value 字段存在
  • group 支持 plugin.groupplugin/group,最终会通过 ConfigChecked 规范化
  • 若是 JSON 字符串配置(如 {"a":1}),读取时会被自动转为数组,使用时留意类型变化


6. ConfigChecked 配置辅助类 🧪

1. 类作用说明

ConfigChecked 为配置数据提供一系列辅助处理方法,如键名替换、文件 URL 替换、层级解析、插件名与分组名解析等。

2. 核心功能介绍

  • 替换配置键前缀(如移除 qcloud.
  • attachment/ 路径统一转换为完整 URL(依赖 plugin\xbUpload\api\Files
  • a.b.c 样式的键解析为多维数组
  • 从路径中解析插件名称、分组名称

3. 使用示例

use plugin\xbCode\api\ConfigChecked;

// 解析层级配置
$flat = [
    'sms.appid' => '123',
    'sms.secret' => 'xxx',
];
$tree = ConfigChecked::getConfigValue($flat);
// $tree['sms']['appid'] = '123';

// 获取插件名与分组
$plugin = ConfigChecked::getPluginName('xbPay.qcloud');
$group  = ConfigChecked::getGroupName('xbPay.qcloud');

4. 关键方法说明

  • public static function replaceKeys(string $name, array $data)
  • public static function replaceFileUrl(array $data)
  • public static function getConfigValue(array $data)
  • public static function getPluginName(string $path) / getGroupName(string $path)

5. 注意事项 ⚠️

  • replaceFileUrl 假定值是字符串且包含 attachment/,非字符串不会处理
  • getPluginName/getGroupName 如果路径中不存在 /.,会抛异常,调用前要保证格式


7. ConfigView 配置项表单视图 📝

1. 类作用说明

ConfigView 用于根据插件提供的模板文件,生成后台配置页面的表单渲染器对象(普通表单或 Tab 表单),以实现「配置即界面」。

2. 核心功能介绍

  • /plugin/{插件标识}/setting/config/{分组}.php 读取普通表单配置
  • /plugin/{插件标识}/setting/tabs/{分组}.php 读取 Tab 表单配置
  • 通过 Builder::formBuilder::tabForm 动态构建表单结构

3. 使用示例

use plugin\xbCode\api\ConfigView;

// 获取普通配置表单渲染器
$formBuilder = ConfigView::getConfigBuilder('xbPay/pay'); // xbPay 插件 pay 分组
// 控制器中直接返回 $formBuilder->render() 或转数组给前端

// 获取 Tab 配置表单渲染器
$tabBuilder = ConfigView::getTabsBuilder('xbPay/pay');

4. 关键方法说明

  • public static function getConfigBuilder(string $path)
  • public static function getTabsBuilder(string $path)
  • public static function getConfigTemplate(string $path, string $type)

5. 注意事项 ⚠️

  • 模板文件必须返回数组,并且结构符合预期字段,否则会抛出「字段参数错误」异常
  • Tab 模板中每个 Tab 必须包含 title/name/body
  • 该类只管「结构」,不操作实际配置值,实际值读写由 ConfigApi 负责


8. DebugApi 调试状态接口 🐞

1. 类作用说明

DebugApi 简单封装了系统调试状态的读取,用于其他组件判断是否需要输出调试信息。

2. 核心功能介绍

  • 读取 .envAPP_DEBUG 环境变量,并转换为布尔值

3. 使用示例

use plugin\xbCode\api\DebugApi;

if (DebugApi::status()) {
    // 输出一些调试日志
}

4. 关键方法说明

  • public static function status()

5. 注意事项 ⚠️

  • .envAPP_DEBUG 需根据环境配置好(生产环境应关闭)


9. Install 插件安装脚本 🧱

1. 类作用说明

Install 继承 BasePlugin(位于 plugin\xbCode\base\BasePlugin),是 xbCode 插件自身的安装/升级/卸载脚本入口。

2. 核心功能介绍

  • 提供 install / update / uninstall 三个方法,统一交给父类实现

3. 使用示例

在插件管理逻辑中,通常会通过反射或者插件管理器调用:

$install = new \plugin\xbCode\api\Install();
$install->install('1.0.0');

4. 关键方法说明

  • public function install(string $version, mixed $context = null)
  • public function update(string $version, mixed $context = null)
  • public function uninstall(string $version, mixed $context = null)

5. 注意事项 ⚠️

  • 这里的 update() 调用的是 parent::uninstall()(看起来像笔误),如果后续依赖升级逻辑,需核对父类实现和业务需求


10. LogApi 日志输出接口 📗

1. 类作用说明

LogApi 统一提供「控制台日志输出 + 文件日志记录」的能力,主要用于安装依赖、插件相关操作的过程输出。

2. 核心功能介绍

  • 支持按类型输出:INFO / ERROR / WARNING
  • 控制台采用彩色输出(在支持 ANSI 的终端中)
  • 错误细节写入 runtime/logs/xbCode/{Y-m-d}.log

3. 使用示例

use plugin\xbCode\api\LogApi;

// 简单 info 日志
LogApi::output('开始安装插件');

// 带错误信息并写日志
LogApi::output('安装失败', $exception->getMessage(), true, 'error');

4. 关键方法说明

  • public static function output(string $message, string $error = '', bool $console = true, string $type = 'info')
  • private static function console(string $message, string $type = 'INFO')
  • private static function addLog(string $title, string $content)

5. 注意事项 ⚠️

  • 文件路径使用 base_path() . "/runtime/logs/xbCode/{$date}.log",需保证目录可写
  • 非 CLI 环境下控制台颜色不会有实际效果,但输出仍可查看


11. MenuChecked 菜单数据处理 🍱

1. 类作用说明

MenuChecked 用于对「菜单配置数据」进行统一的格式化与校验,包括:

  • 树结构与二维数组互转
  • 为菜单补充 id/pid/menu_key 等必要字段
  • 重设字段值(如批量设置 plugin)
  • 支持按字段过滤、重置数组下标等

2. 核心功能介绍

  • 将二维菜单数组转树结构,或反向转换
  • 自动填补 idpid,生成 menu_key(层级链)
  • 校验必需字段存在,如 id/pid/method/plugin
  • 批量把菜单中的某字段重设为指定值(如绑定插件名)
  • 对多层数组重排键名为顺序索引

3. 使用示例

use plugin\xbCode\api\MenuChecked;

// 将菜单配置解析为树状结构并规范化
$menus = MenuChecked::parseMenu($rawMenus, true);

// 批量去掉某些字段(例如内部字段)
$cleanMenus = MenuChecked::unsetMenusFields($menus, ['is_system', 'is_default']);

4. 关键方法说明

  • public static function parseMenu(array $data, bool $isLevel = false)
  • public static function serializeMenus(array $data)
  • menu2DToTree / menuTreeTo2D / menusNo
  • public static function resetField(array $menus, string $field, string $value)
  • public static function resetKeys($array)
  • protected static function parseMenuData(array $data)
  • protected static function getMenuKey(array $data, string $key = '')

5. 注意事项 ⚠️

  • parseMenuData 依赖 request()->plugin,在 CLI 场景可能取不到插件名
  • 菜单路径会被自动加上 app/{plugin}/ 前缀,定义菜单时无需重复加
  • 如果菜单树数据缺少 idpid,会抛出异常


12. MenuData 菜单数据工具 🧾

1. 类作用说明

MenuData 提供对菜单数据的简单辅助:递归获取子菜单 ID、验证菜单结构正确性。

2. 核心功能介绍

  • 根据某个菜单 ID,递归查出其所有子菜单的 ID
  • 对菜单数组进行必要字段校验(如标题、路径、是否显示、类型)

3. 使用示例

use plugin\xbCode\api\MenuData;

// 获取某菜单及全部子菜单 ID
$ids = MenuData::getChildrenIds($menuId);

// 校验菜单配置
MenuData::validateMenus($menus);

4. 关键方法说明

  • public static function getChildrenIds(int $id)
  • public static function validateMenus(array $data)

5. 注意事项 ⚠️

  • 验证仅检查必要字段是否存在,不做值范围校验(类型值等由其他类校验)
  • 获取子菜单 ID 时只筛选 state='20' 的菜单


13. MenuOption 菜单联级选项 🌳

1. 类作用说明

MenuOption 用于把后台菜单规则(AdminRule)转换为前端「级联选择」组件可用的数据结构。

2. 核心功能介绍

  • 将菜单树转换为 label/value/disabled/children 结构
  • 自动添加「顶级权限菜单」选项

3. 使用示例

use plugin\xbCode\api\MenuOption;

$options = MenuOption::getCascaderOptions();
// 前端可以直接用在 ElementUI Cascader 或类似组件中

4. 关键方法说明

  • public static function getCascaderOptions()
  • public static function getChildrenOptions(array $data)

5. 注意事项 ⚠️

  • 默认不会「禁用」任何项,除非数据库里设置了 disabled 字段
  • 若数据量大,前端要注意性能(可以考虑懒加载)


14. MenuResponse 资源型菜单 🔁

1. 类作用说明

MenuResponse 用于根据一个父级菜单项,自动生成其相关的「资源操作菜单」,比如:添加、修改、删除、行编辑、表格数据等。

2. 核心功能介绍

  • 根据预定义的操作集合(add/edit/del/rowEdit/Table)快速生成子菜单
  • 自动拼接路径:模块/控制器/操作
  • 对表格资源作特殊处理:模块/控制器/原action + Table

3. 使用示例

use plugin\xbCode\api\MenuResponse;

// 假设 $parent 是某个菜单记录(如用户管理列表)
MenuResponse::addResponse($parent, ['add', 'edit', 'del', 'Table']);

4. 关键方法说明

  • public static function addResponse(array $parent, array $data)
  • public static function responseOption()

5. 注意事项 ⚠️

  • 父级菜单 path 必须是 module/controller/action 三段结构
  • 若父级菜单在 AdminRule 中不存在,会抛出异常
  • 若同一路径的资源菜单已经存在,当前逻辑不会自动去重,应提前规划


15. Menus 菜单核心类 📚

1. 类作用说明

Menus 是整个系统的「菜单管理核心」,负责:

  • 获取指定管理员可见的菜单(根据角色与启用状态)
  • 从配置文件中加载菜单并统一解析
  • 安装/卸载插件菜单
  • 计算角色拥有的权限规则路径(含父级菜单自动补全)

2. 核心功能介绍

  • 获取管理员菜单树:结合 AdminAdminRoleAdminRule 三张表
  • 从单个或多个菜单配置文件中读取菜单,并解析为标准格式
  • 将插件配置中的菜单安装到 AdminRule 表,或从中卸载
  • 计算角色规则路径并进行缓存

3. 使用示例

获取管理员菜单:

use plugin\xbCode\api\Menus;

$menus = Menus::get($adminId);
// 返回树状菜单数组,可直接给前端

安装插件菜单:

// 插件中配置:config("plugin.xbPay.menu")
Menus::install(config('plugin.xbPay.menu'), 'xbPay');

4. 关键方法说明

  • public static function get(int $adminId)
  • public static function getMenusPath(string $path) / getMenusPaths(array $paths)
  • public static function getMenusModule(string $plugin = '')
  • public static function getRoleRules(int $roleId, bool $force = false)
  • public static function getParentRules(int $pid, array $rules = [])
  • public static function install(array $data, string $name, int $level = 0)
  • public static function uninstall(string $name = '')

5. 注意事项 ⚠️

  • 安装前必须配置好插件菜单:config/plugin/{plugin}/menu.php 或 config 中 plugin.{name}.menu
  • 角色规则中仅存路径字符串,路径变更后需要重新同步规则
  • 卸载时只按路径匹配,若路径被修改,可能导致遗留菜单


16. Mysql MySQL 工具类 🧮

1. 类作用说明

Mysql 提供一整套与 MySQL 交互的工具,侧重于:

  • 动态配置/连接数据库
  • 查询表结构与字段信息
  • 导入 .sql 文件
  • 导出数据库结构与数据为 .sql 文件
  • 预览某个表的建表语句和数据

2. 核心功能介绍

  • 读取 config('think-orm') 并动态合并配置
  • 判断数据表是否存在 / 获取所有表名
  • 获取表结构、字段列表、字段名列表
  • 导入 SQL 文件时支持自定义旧表前缀替换、新表前缀
  • 导出全部/部分表结构和数据

3. 使用示例

动态连接其他数据库:

use plugin\xbCode\api\Mysql;

Mysql::connect([
    'hostname' => '127.0.0.1',
    'database' => 'test',
    'username' => 'root',
    'password' => '123456',
]);
$tables = Mysql::getTableNames();

导入 SQL:

Mysql::importSql(base_path().'/plugin/xbPay/install.sql', '__PREFIX__', 'xb_');

导出整个库:

Mysql::exportSql(runtime_path().'/backup/all.sql', true);

4. 关键方法说明(选部分重点)

  • 连接与执行:
  • 表/字段信息:
  • SQL 文件相关:
  • 导出:

5. 注意事项 ⚠️

  • 所有 SQL 操作都是直接执行的,请在生产环境谨慎使用 dropTable(s)importSql
  • importSql 要求 SQL 文件不要使用 /* */ 注释,这是出于简化解析考虑
  • 导出数据时简单使用 addslashes 转义,对二进制字段可能不完全适配


17. Packages 插件依赖检测助手 🧩

1. 类作用说明

Packages 用于检查某个插件的依赖是否满足,包括:

  • 插件自身 plugins.json 配置字段完整性
  • 依赖的其他插件是否存在、是否安装
  • composer 依赖的类是否存在

2. 核心功能介绍

  • 读取并校验 /plugin/{name}/plugins.json
  • 一键检查插件依赖(插件 + composer)
  • 按需获取插件配置和依赖信息

3. 使用示例

use plugin\xbCode\api\Packages;

// 安装前预检查
Packages::checked('xbPay');

4. 关键方法说明

  • public static function config(string $name)
  • public static function checked(string $name)
  • public static function composer(string $plugin)
  • public static function plugins(string $plugin)
  • public static function getPackages(string $plugin, string $type)

5. 注意事项 ⚠️

  • 插件依赖检查通常在安装前进行,可与 PluginsInstallApi 配合使用
  • config() 中对 desc 错误信息提示为「description 字段」,需要保持与实际 key 一致


18. PluginPreviewApi 插件预览图接口 🎨

1. 类作用说明

PluginPreviewApi 用于自动为插件生成一张简单的 SVG 预览图,避免插件列表中预览图为空。

2. 核心功能介绍

  • 支持单色背景与渐变背景两种风格
  • 背景色从 ColorsEnum 或预置渐变色数组中随机选取
  • 中间显示插件标题,字体大小根据字数自动缩放

3. 使用示例

use plugin\xbCode\api\PluginPreviewApi;
use plugin\xbCode\api\Packages;

$plugin = Packages::config('xbPay');
PluginPreviewApi::make()->create($plugin);

4. 关键方法说明

  • public static function make()
  • public function create(array $plugin)
  • private function createColorPreview(array $plugin)
  • private function createMulticolorPreview(array $plugin)
  • private function getRandBgColor(bool $gradient)

5. 注意事项 ⚠️

  • 依赖 plugin\xbCode\enum\ColorsEnum,需要保证该枚举存在并可用
  • 插件的 plugins.json 中最好包含合适长度的 title,避免字体过小


19. PluginsApi 插件管理核心接口 🧩🧩

1. 类作用说明

PluginsApi 是整个插件体系的核心管理类,负责:

  • 扫描本地插件
  • 读取插件元信息(title/version/author/预览图/readme)
  • 判断插件是否存在/已安装/已启用
  • 安装记录、状态管理、依赖检查辅助
  • 验证插件安装包 zip 文件

2. 核心功能介绍

  • 支持单例获取:make()
  • 提供「全部插件 / 已安装 / 已启用」列表
  • 提供插件选项(下拉选择)结构
  • 管理插件状态并触发展开事件
  • 读取插件 README 内容
  • 验证插件安装包,读取包内 plugins.json 信息

3. 使用示例

获取所有本地插件:

$plugins = PluginsApi::make()->getLocalPlugins();

获取已启用插件选项:

$options = PluginsApi::make()->options();
// 每项含 label/value,可直接给前端选择

检测某插件是否已安装并启用:

$api = PluginsApi::make();
$api->installedThrow('xbPay');

if (! $api->hasEnabled('xbPay')) {
    throw new \Exception('支付插件未启用');
}

4. 关键方法说明(择重点)

  • 单例与列表:
  • 插件信息:
  • 包文件验证与预览:
  • 状态与安装记录:
  • 依赖分析:

5. 注意事项 ⚠️

  • install() 方法中使用 $plugin['desc'] 变量看起来是笔误,应为 $data['desc'],可能导致安装记录中 desc 为空;若要依赖该字段,建议修复
  • 插件信息中 readme 的处理最后把 $readme 置空再赋值,有逻辑不一致迹象,使用时注意
  • 插件列表依赖 Plugins 模型表与 plugins.json 文件结构保持一致


20. PluginsBaseApi 插件基类 🚚

1. 类作用说明

PluginsBaseApi 是插件安装/导入/卸载流程的抽象基类,封装了通用步骤:

  • 设置插件基本信息(name/version/包路径)
  • 上传插件 zip 包
  • 解压插件包并修正目录结构
  • 执行插件内部 Install 脚本
  • 通过 steps 数组定义操作步骤与下一步

2. 核心功能介绍

  • 使用 steps 描述安装/卸载多步骤过程
  • 上传插件 zip 包并校验 plugins.json
  • 解压插件包到 /plugin/{name} 目录
  • 动态加载插件自身 api/Install.php,执行 install/update/uninstall 等方法及其前/后置钩子

3. 使用示例

(通常通过子类 PluginsImportApi / PluginsInstallApi / PluginsUninstallApi 使用)

use plugin\xbCode\api\PluginsInstallApi;

// 控制器中
$api = new PluginsInstallApi();
$result = $api->start('xbPay', '1.0.0', 'preChecked');

4. 关键方法说明

  • 基本信息与步骤管理:
  • 上传:
  • 解压:
  • 执行脚本:

5. 注意事项 ⚠️

  • 上传接口默认取字段名 file,若前端字段不同需修改
  • 解压过程和目录修复依赖 DirUtilZipUtil,要保证工具类可用
  • 脚本执行完全依赖插件内部实现,若插件 Install 脚本抛异常,需在上层捕获并处理


21. PluginsImportApi 插件包导入 📥

1. 类作用说明

PluginsImportApi 继承 PluginsBaseApi,用于「导入插件包」(上传 zip + 解压),还不涉及安装数据。

2. 核心功能介绍

  • 定义了两个步骤:

3. 使用示例

use plugin\xbCode\api\PluginsImportApi;

$api = new PluginsImportApi();
$result = $api->start('', '', 'upload');
// 前端根据 result 中的 next 字段决定跳到 unzip 步骤

4. 关键方法说明

  • $steps 数组:
  • 实际逻辑由父类的 upload()unzip() 提供

5. 注意事项 ⚠️

  • 此类只负责把插件包放入插件目录,不做数据库安装、菜单创建等操作
  • 需要后续再通过 PluginsInstallApi 做「安装数据」


22. PluginsInstallApi 插件安装接口 📦

1. 类作用说明

PluginsInstallApi 继承 PluginsBaseApi,用于执行插件的安装过程(不含上传解压),包括:

  • 预检查插件环境与依赖
  • 执行插件 Install 脚本进行数据安装
  • 记录插件安装信息

2. 核心功能介绍

  • 三个步骤:

3. 使用示例

use plugin\xbCode\api\PluginsInstallApi;

$api = new PluginsInstallApi();
// 第一次调用预检
$res1 = $api->start('xbPay', '1.0.0', 'preChecked');
// 下一步 install
$res2 = $api->start('xbPay', '1.0.0', 'install');
// 最后 finish
$res3 = $api->start('xbPay', '1.0.0', 'finish');

4. 关键方法说明

  • protected function preChecked()
  • protected function install()
  • protected function finish()

5. 注意事项 ⚠️

  • 需要先完成插件包导入(PluginsImportApi)使得 /plugin/{name} 目录存在
  • finish() 中依赖 PluginsApi::get() 正确解析 plugins.json


23. PluginsUninstallApi 插件卸载 📤

1. 类作用说明

PluginsUninstallApi 继承 PluginsBaseApi,负责执行插件卸载步骤,包括:

  • 调用插件内部卸载脚本
  • 删除插件在 Plugins 表中的安装记录

2. 核心功能介绍

  • 两个步骤:

3. 使用示例

use plugin\xbCode\api\PluginsUninstallApi;

$api = new PluginsUninstallApi();
$res1 = $api->start('xbPay', '1.0.0', 'uninstall');
$res2 = $api->start('xbPay', '1.0.0', 'finish');

4. 关键方法说明

  • $steps
  • protected function uninstall()
  • protected function finish()

5. 注意事项 ⚠️

  • steps 数组中步骤名 unInstall 与方法名 uninstall 不一致,start() 中通过 in_array+method_exists 时可能导致问题;若发现卸载流程无法执行,需检查并修复此处
  • 卸载插件前注意其它插件是否依赖此插件,可配合 PluginsApi::hasPluginDependThrow 使用


24. Url 插件路由 URL 生成器 🌐

1. 类作用说明

Url 是一个为插件路由生成 URL 的小工具,兼容:

  • 指定插件/模块/控制器/方法
  • 自动从当前请求推断插件、模块、控制器、方法
  • 生成带域名或不带域名的 URL
  • 携带查询参数,并可选择是否 URL 编码

2. 核心功能介绍

  • 支持链式调用:Url::make('Controller/action')->plugin('xbCode')->module('admin')->get()
  • 自动根据当前请求 request()->plugin/app/controller/action 推断路径
  • 可加上协议 + 域名,生成完整外部链接
  • 支持将对象直接 cast 为字符串或 JSON 时输出 URL

3. 使用示例

生成后台接口地址:

use plugin\xbCode\api\Url;

// 当前处于 xbCode 插件 admin 模块
$url = Url::make('Publics/login')->get();
// 结果类似:/app/xbCode/admin/Publics/login

// 显式指定插件与模块
$full = Url::make('Publics/login')
    ->plugin('xbCode')
    ->module('admin')
    ->schema('https')
    ->domain('admin.example.com')
    ->get();
// https://admin.example.com/app/xbCode/admin/Publics/login

携带参数:

$url = Url::make('Publics/user')
    ->query(['id' => 1, 'tab' => 'profile'])
    ->get();
// /app/xbCode/admin/Publics/user?id=1&tab=profile

4. 关键方法说明

  • 基本属性:
  • 创建与链式配置:
  • 生成:

5. 注意事项 ⚠️

  • plugin/module/controller/action 中某一项为空,会自动删掉对应的路径段
  • 需要注意配置 plugin.xbCode.app.controller_suffix,否则从 request()->controller 截取 controller 名可能不准确
  • encode(false)(默认)时会对 query 做 urldecode,让 URL 更可读,如有特殊字符请开启编码