chore(event): 更新InitAddon, 跟踪初始化事件监听
This commit is contained in:
@@ -5,6 +5,7 @@ namespace app\event\init;
|
|||||||
use app\model\system\Addon;
|
use app\model\system\Addon;
|
||||||
use think\facade\Event;
|
use think\facade\Event;
|
||||||
use think\facade\Cache;
|
use think\facade\Cache;
|
||||||
|
use think\facade\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化插件
|
* 初始化插件
|
||||||
@@ -30,19 +31,38 @@ class InitAddon
|
|||||||
$addon_model = new Addon();
|
$addon_model = new Addon();
|
||||||
$addon_data = $addon_model->getAddonList([], 'name');
|
$addon_data = $addon_model->getAddonList([], 'name');
|
||||||
$current_addons = $addon_data['data'];
|
$current_addons = $addon_data['data'];
|
||||||
|
$current_addon_names = array_column($current_addons, 'name');
|
||||||
|
|
||||||
|
// 1. 记录总的addon数量和名称
|
||||||
|
$total_addons = count($current_addon_names);
|
||||||
|
Log::write("[Addon Init] 总插件数量: {$total_addons}, 插件列表: " . implode(', ', $current_addon_names), 'info');
|
||||||
|
|
||||||
|
// 2. 记录缓存中不存在但实际存在的addon
|
||||||
|
$cache_addon_names = [];
|
||||||
|
if (!empty($cache) && isset($cache['addon_events'])) {
|
||||||
|
$cache_addon_names = array_keys($cache['addon_events']);
|
||||||
|
}
|
||||||
|
$new_addons_in_cache = array_diff($current_addon_names, $cache_addon_names);
|
||||||
|
if (!empty($new_addons_in_cache)) {
|
||||||
|
Log::write("[Addon Init] 缓存中不存在但实际存在的插件: " . implode(', ', $new_addons_in_cache), 'info');
|
||||||
|
}
|
||||||
|
|
||||||
// 构建新的插件事件映射
|
// 构建新的插件事件映射
|
||||||
$new_addon_events = [];
|
$new_addon_events = [];
|
||||||
$new_merged_listeners = [];
|
$new_merged_listeners = [];
|
||||||
|
$addons_with_events = [];
|
||||||
|
$addons_without_events = [];
|
||||||
|
|
||||||
// 遍历当前插件,收集事件信息
|
// 遍历当前插件,收集事件信息
|
||||||
foreach ($current_addons as $addon) {
|
foreach ($current_addons as $addon) {
|
||||||
if (file_exists('addon/' . $addon['name'] . '/config/event.php')) {
|
$addon_name = $addon['name'];
|
||||||
$addon_event = require_once 'addon/' . $addon['name'] . '/config/event.php';
|
if (file_exists('addon/' . $addon_name . '/config/event.php')) {
|
||||||
|
$addon_event = require_once 'addon/' . $addon_name . '/config/event.php';
|
||||||
$listen = $addon_event['listen'] ?? [];
|
$listen = $addon_event['listen'] ?? [];
|
||||||
|
|
||||||
if (!empty($listen)) {
|
if (!empty($listen)) {
|
||||||
$new_addon_events[$addon['name']] = $listen;
|
$new_addon_events[$addon_name] = $listen;
|
||||||
|
$addons_with_events[] = $addon_name;
|
||||||
|
|
||||||
// 合并事件监听器
|
// 合并事件监听器
|
||||||
foreach ($listen as $event => $listeners) {
|
foreach ($listen as $event => $listeners) {
|
||||||
@@ -51,21 +71,50 @@ class InitAddon
|
|||||||
}
|
}
|
||||||
$new_merged_listeners[$event] = array_unique(array_merge($new_merged_listeners[$event], $listeners));
|
$new_merged_listeners[$event] = array_unique(array_merge($new_merged_listeners[$event], $listeners));
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$addons_without_events[] = $addon_name;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$addons_without_events[] = $addon_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3. 记录注册和未注册事件监听的addon
|
||||||
|
Log::write("[Addon Init] 注册了事件监听的插件: " . (empty($addons_with_events) ? '无' : implode(', ', $addons_with_events)), 'info');
|
||||||
|
Log::write("[Addon Init] 未注册事件监听的插件: " . (empty($addons_without_events) ? '无' : implode(', ', $addons_without_events)), 'info');
|
||||||
|
|
||||||
// 获取当前所有事件名称
|
// 获取当前所有事件名称
|
||||||
$all_events = array_keys($new_merged_listeners);
|
$current_events = array_keys($new_merged_listeners);
|
||||||
|
|
||||||
|
// 获取缓存中的旧事件名称
|
||||||
|
$old_events = [];
|
||||||
if (!empty($cache) && isset($cache['addon_events'])) {
|
if (!empty($cache) && isset($cache['addon_events'])) {
|
||||||
$old_addon_events = $cache['addon_events'];
|
$old_addon_events = $cache['addon_events'];
|
||||||
// 合并旧事件名称,确保所有事件都被处理
|
|
||||||
$old_events = [];
|
|
||||||
foreach ($old_addon_events as $event_listeners) {
|
foreach ($old_addon_events as $event_listeners) {
|
||||||
$old_events = array_merge($old_events, array_keys($event_listeners));
|
$old_events = array_merge($old_events, array_keys($event_listeners));
|
||||||
}
|
}
|
||||||
$old_events = array_unique($old_events);
|
$old_events = array_unique($old_events);
|
||||||
$all_events = array_unique(array_merge($all_events, $old_events));
|
}
|
||||||
|
|
||||||
|
// 4. 记录已存在和新注册的事件
|
||||||
|
$all_events = array_unique(array_merge($current_events, $old_events));
|
||||||
|
$events_already_exists = [];
|
||||||
|
$events_new_registered = [];
|
||||||
|
|
||||||
|
foreach ($current_events as $event) {
|
||||||
|
if (in_array($event, $old_events)) {
|
||||||
|
$events_already_exists[] = $event;
|
||||||
|
} else {
|
||||||
|
$events_new_registered[] = $event;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($events_already_exists)) {
|
||||||
|
Log::write("[Addon Init] 已存在的事件: " . implode(', ', $events_already_exists), 'info');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($events_new_registered)) {
|
||||||
|
Log::write("[Addon Init] 新注册的事件: " . implode(', ', $events_new_registered), 'info');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理每个事件的监听器
|
// 处理每个事件的监听器
|
||||||
|
|||||||
Reference in New Issue
Block a user