diff --git a/src/app/event/init/InitAddon.php b/src/app/event/init/InitAddon.php index a327eb3a2..d5470f840 100644 --- a/src/app/event/init/InitAddon.php +++ b/src/app/event/init/InitAddon.php @@ -5,6 +5,7 @@ namespace app\event\init; use app\model\system\Addon; use think\facade\Event; use think\facade\Cache; +use think\facade\Log; /** * 初始化插件 @@ -30,19 +31,38 @@ class InitAddon $addon_model = new Addon(); $addon_data = $addon_model->getAddonList([], 'name'); $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_merged_listeners = []; + $addons_with_events = []; + $addons_without_events = []; // 遍历当前插件,收集事件信息 foreach ($current_addons as $addon) { - if (file_exists('addon/' . $addon['name'] . '/config/event.php')) { - $addon_event = require_once 'addon/' . $addon['name'] . '/config/event.php'; + $addon_name = $addon['name']; + if (file_exists('addon/' . $addon_name . '/config/event.php')) { + $addon_event = require_once 'addon/' . $addon_name . '/config/event.php'; $listen = $addon_event['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) { @@ -51,21 +71,50 @@ class InitAddon } $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'])) { $old_addon_events = $cache['addon_events']; - // 合并旧事件名称,确保所有事件都被处理 - $old_events = []; foreach ($old_addon_events as $event_listeners) { $old_events = array_merge($old_events, array_keys($event_listeners)); } $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'); } // 处理每个事件的监听器