feat: 公共表更名 common/member 前缀 + 插件命令自动加载 + 版本 1.1.1
- 18 张公共表更名(addon/attachment/configure/links/spider_log/spider_stat/sms/notice/ad/task/prop/medal/help/card -> common_*,member_wallets->member_wallet,score_rule/score_log -> member_*,addon_config->common_addonconf),模型全部对齐新表名,Db 直引用清零 - Attachment 模型补 表名绑定,修复富文本上传查 wxapp_attachment 1146 隐患 - install.sql + 迁移 SQL:backend_admin/backend_role delete_at 默认 0,修复软删除(NULL != 0)误过滤导致后台菜单为空 - AppService::boot() 支持插件 info.php 声明 commands 自动注册插件命令(psr-4 自动加载,坏类名自动跳过) - 各插件(haonav/mqttbroker/wxchat/articles/blog/forum 等)字段与配置同步调整 - 框架版本 1.1.0 -> 1.1.1
This commit is contained in:
@@ -26,7 +26,7 @@ use ywxapp\model\BaseModel;
|
||||
* 整合以下自愈能力,使一个出问题的插件恢复到「菜单正确 + 表结构完整 + 配置齐全」的状态:
|
||||
* 1. 重载菜单:refreshMenu()(清旧 admin_power/user_rule + 重建,顺带修复菜单路由前缀)
|
||||
* 2. 数据库自愈:解析 install.sql 中该插件全部 CREATE TABLE,缺表建表、缺列补列
|
||||
* 3. 配置行补全:确保 addon_config 表存在该插件配置行(无则按默认 info 写入)
|
||||
* 3. 配置行补全:确保 common_addonconf 表存在该插件配置行(无则按默认 info 写入)
|
||||
*
|
||||
* 用法:
|
||||
* php think addon:repair <插件名> # 修复指定插件(菜单 + 表 + 配置)
|
||||
@@ -245,24 +245,25 @@ class AddonRepair extends Command
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置行补全:确保 addon_config 表有该插件配置行。
|
||||
* 配置行补全:确保 common_addonconf 表有该插件配置行。
|
||||
*/
|
||||
private function repairConfig(AddonService $svc, string $name, Output $output): bool
|
||||
{
|
||||
$default = Config::get('database.default');
|
||||
$prefix = Config::get("database.connections.{$default}.prefix") ?: '';
|
||||
$configTable = $prefix . 'addon_config';
|
||||
$configTable = $prefix . 'common_addonconf';
|
||||
try {
|
||||
if (!BaseModel::tableExists($configTable)) {
|
||||
$output->writeln('<comment>[配置] addon_config 表不存在,跳过</comment>');
|
||||
$output->writeln('<comment>[配置] common_addonconf 表不存在,跳过</comment>');
|
||||
return true;
|
||||
}
|
||||
$row = Db::table($configTable)->where('name', $name)->find();
|
||||
if (!empty($row)) {
|
||||
// common_addonconf 设计:每行一个配置项(addon + name 唯一),故按 addon 判断是否存在
|
||||
$existing = Db::table($configTable)->where('addon', $name)->count();
|
||||
if ($existing > 0) {
|
||||
$output->writeln('<comment>[配置] 配置行已存在,跳过</comment>');
|
||||
return true;
|
||||
}
|
||||
// 读取插件默认配置(config.php 返回数组)
|
||||
// 读取插件默认配置(config.php 返回关联数组 name=>value)
|
||||
$configFile = $this->addonDir($name) . 'config.php';
|
||||
$value = [];
|
||||
if (is_file($configFile)) {
|
||||
@@ -271,10 +272,13 @@ class AddonRepair extends Command
|
||||
$value = $cfg;
|
||||
}
|
||||
}
|
||||
$data = [
|
||||
'name' => $name,
|
||||
'value' => json_encode($value, JSON_UNESCAPED_UNICODE),
|
||||
];
|
||||
if (empty($value)) {
|
||||
$output->writeln('<comment>[配置] 无默认配置,跳过</comment>');
|
||||
return true;
|
||||
}
|
||||
// 逐配置项写入独立行(与 AddonService::config/$changed 的存储格式一致)
|
||||
\ywxapp\service\AddonService::config($name, $value);
|
||||
$data = []; // 已通过 AddonService::config 写入,无需再 insert
|
||||
// 兼容不同时间戳字段名(createtime/updatetime 或 create_time/update_time)
|
||||
$cols = Db::query("SHOW COLUMNS FROM `{$configTable}`");
|
||||
$colNames = array_column($cols, 'Field');
|
||||
|
||||
Reference in New Issue
Block a user