Bläddra i källkod

feat(core): 触发扩展版本变化事件并优化扩展 ID 冲突检查

- 在更新扩展版本时触发 'extension_version_change'事件
- 优化扩展 ID冲突检查逻辑,直接读取安装路径下的 composer.json 文件
runphp 7 månader sedan
förälder
incheckning
73eaf631e5
2 ändrade filer med 9 tillägg och 3 borttagningar
  1. 5 2
      src/Plugin.php
  2. 4 1
      src/Service/CoreService.php

+ 5 - 2
src/Plugin.php

@@ -9,6 +9,7 @@ use Composer\InstalledVersions;
 use Composer\Installer\PackageEvent;
 use Composer\Installer\PackageEvents;
 use Composer\IO\IOInterface;
+use Composer\Json\JsonFile;
 use Composer\Plugin\PluginInterface;
 
 class Plugin implements PluginInterface, EventSubscriberInterface
@@ -43,8 +44,10 @@ class Plugin implements PluginInterface, EventSubscriberInterface
         $extensionId = $extra['sixshop']['id'];
         $installedPackages = InstalledVersions::getInstalledPackagesByType(self::EXTENSION_TYPE);
         foreach ($installedPackages as $installedPackage) {
-            $installedExtra = $installedPackage->getExtra();
-            if ($installedExtra['sixshop']['id'] === $extensionId) {
+            $installPath = InstalledVersions::getInstallPath($installedPackage);
+            $composerJson = new JsonFile($installPath . '/composer.json');
+            $composer = $composerJson->read();
+            if ($composer['extra']['sixshop']['id'] === $extensionId) {
                 throw new \RuntimeException("Extension ID '{$extensionId}' already exists. Please use a unique ID for your extension.");
             }
         }

+ 4 - 1
src/Service/CoreService.php

@@ -10,6 +10,7 @@ use SixShop\Core\Plugin;
 use SixShop\Core\Request;
 use think\event\HttpRun;
 use think\exception\Handle;
+use think\facade\Event;
 use think\Service;
 
 class CoreService extends Service
@@ -60,7 +61,9 @@ class CoreService extends Service
             $installPath = InstalledVersions::getInstallPath($item);
             $composerJson = new JsonFile($installPath . '/composer.json');
             $composer = $composerJson->read();
-            self::$extensionComposerMap[$composer['extra']['sixshop']['id']] = $composer;
+            $extensionID = $composer['extra']['sixshop']['id'];
+            self::$extensionComposerMap[$extensionID] = $composer;
+            Event::trigger('extension_version_change', [$extensionID, $version]);
         };
         $header = '// This file is automatically generated at:' . date('Y-m-d H:i:s') . PHP_EOL . 'declare (strict_types = 1);' . PHP_EOL;
         $content = '<?php ' . PHP_EOL . $header . "return " . var_export(self::$extensionComposerMap, true) . ';';