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 / editorUploadApipublic function get()
5. 注意事项 ⚠️
- 依赖
ConfigApi、Url、PluginsApi、xbUpload等多处组件,使用前需保证这些插件/配置存在 - 若有自定义前端登录页或布局,优先在插件
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_exec和exec不能被 PHP 禁用,否则会抛出异常- 安装命令在生产环境执行要注意安全与超时问题
5. ConfigApi 配置读写接口 ⚙️
1. 类作用说明
ConfigApi 为系统及插件各模块提供「统一的配置读写接口」,支持:
- 按分组读写配置
- 缓存配置到
Cache - 支持层级配置(点号语法)
- 自动处理附件路径(与
xbUpload对接) - 自动解析 JSON 字符串为数组
2. 核心功能介绍
- 基于
plugin\xbCode\app\model\Config操作配置表 - 通过缓存减少数据库查询
- 支持
group/name或group.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.group或plugin/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::form与Builder::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. 核心功能介绍
- 读取
.env中APP_DEBUG环境变量,并转换为布尔值
3. 使用示例
use plugin\xbCode\api\DebugApi;
if (DebugApi::status()) {
// 输出一些调试日志
}
4. 关键方法说明
public static function status()
5. 注意事项 ⚠️
.env中APP_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. 核心功能介绍
- 将二维菜单数组转树结构,或反向转换
- 自动填补
id、pid,生成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 / menusNopublic 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}/前缀,定义菜单时无需重复加 - 如果菜单树数据缺少
id或pid,会抛出异常
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. 核心功能介绍
- 获取管理员菜单树:结合
Admin、AdminRole、AdminRule三张表 - 从单个或多个菜单配置文件中读取菜单,并解析为标准格式
- 将插件配置中的菜单安装到
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,若前端字段不同需修改 - 解压过程和目录修复依赖
DirUtil与ZipUtil,要保证工具类可用 - 脚本执行完全依赖插件内部实现,若插件 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 更可读,如有特殊字符请开启编码