瀏覽代碼

refactor(extension):优化扩展加载逻辑并返回无效扩展ID

- 修改 AutoloadService::load 方法返回值为数组
- 收集并返回缺少 sixshop.class 配置的无效扩展ID
- 在 CoreService::boot 中过滤掉无效扩展
- 保留原有扩展绑定与事件触发逻辑- 确保系统扩展优先启动
- 添加对无效扩展的跳过处理
runphp 6 月之前
父節點
當前提交
ab8c7be769
共有 2 個文件被更改,包括 16 次插入7 次删除
  1. 4 6
      src/Service/AutoloadService.php
  2. 12 1
      src/Service/CoreService.php

+ 4 - 6
src/Service/AutoloadService.php

@@ -14,10 +14,12 @@ class AutoloadService
     {
     }
 
-    public function load(array $extensionComposerMap, array $extensionNameList): void
+    public function load(array $extensionComposerMap, array $extensionNameList): array
     {
+        $invalidExtensionIDs = [];
         foreach ($extensionComposerMap as $extensionID => $composerFile) {
             if (!isset($composerFile['extra']['sixshop']['class'])) {
+                $invalidExtensionIDs[] = $extensionID;
                 continue;
             }
             $this->app->bind('extension.' . $extensionID, $composerFile['extra']['sixshop']['class']);
@@ -40,11 +42,7 @@ class AutoloadService
                 $this->app->bind('extension.' . $moduleName, $extensionClass);
             }
         }
-        foreach ($extensionComposerMap + $extensionNameList as $moduleName => $_) {
-            $extension = $this->getExtension($moduleName);
-            $extension->boot();
-            $this->app->event->trigger('extension.boot', $extension);
-        }
+        return $invalidExtensionIDs;
     }
 
     public function getExtension(string $moduleName): ExtensionInterface

+ 12 - 1
src/Service/CoreService.php

@@ -96,7 +96,18 @@ class CoreService extends Service
 
     public function boot(): void
     {
-        $this->app->make(AutoloadService::class)->load(self::$extensionComposerMap, self::$normalExtensionNameList);
+        $autoloadService = $this->app->make(AutoloadService::class);
+        $invalidExtensionIDs = $autoloadService->load(self::$extensionComposerMap, self::$normalExtensionNameList);
+        self::$extensionNameList = array_diff(self::$extensionNameList, $invalidExtensionIDs);
+        $this->app->get('extension.system')->boot();
+        foreach (self::$extensionComposerMap + self::$normalExtensionNameList as $moduleName => $_) {
+            if (in_array($moduleName, $invalidExtensionIDs)) {
+                continue;
+            }
+            $extension = $autoloadService->getExtension($moduleName);
+            $extension->boot();
+            $this->app->event->trigger('extension.boot', $extension);
+        }
         $this->app->make(HookAttributeService::class)->init();
         $this->app->event->trigger('hook_init', $this->app);
         $this->app->event->listen(HttpRun::class, function () {