Переглянути джерело

feat(core): 创建 SixShop 扩展安装器

runphp 7 місяців тому
батько
коміт
d963c3e694
2 змінених файлів з 44 додано та 1 видалено
  1. 8 1
      composer.json
  2. 36 0
      src/ExtensionInstaller.php

+ 8 - 1
composer.json

@@ -1,6 +1,11 @@
 {
     "name": "six-shop/core",
     "description": "核心扩展",
+    "type": "composer-plugin",
+    "keywords": [
+        "sixshop",
+        "thinkphp"
+    ],
     "license": "MIT",
     "autoload": {
         "psr-4": {
@@ -15,6 +20,7 @@
     ],
     "require": {
         "php": ">=8.3",
+        "composer-plugin-api": "^2.0",
         "topthink/framework": "^8.1",
         "topthink/think-orm": "^4.0"
     },
@@ -23,6 +29,7 @@
             "services": [
                 "SixShop\\Core\\Service\\CoreService"
             ]
-        }
+        },
+        "class": "SixShop\\Core\\ExtensionInstaller"
     }
 }

+ 36 - 0
src/ExtensionInstaller.php

@@ -0,0 +1,36 @@
+<?php
+declare(strict_types=1);
+
+namespace SixShop\Core;
+
+use Composer\EventDispatcher\EventSubscriberInterface;
+use Composer\Installer\LibraryInstaller;
+use Composer\Installer\PackageEvents;
+use Composer\Package\PackageInterface;
+
+class ExtensionInstaller extends LibraryInstaller implements EventSubscriberInterface
+{
+    public function supports(string $packageType)
+    {
+        return $packageType === 'sixshop-extension';
+    }
+
+    public function getInstallPath(PackageInterface $package)
+    {
+        return 'extension/' . $package->getPrettyName();
+    }
+
+
+    public static function getSubscribedEvents()
+    {
+        return [
+            PackageEvents::POST_PACKAGE_INSTALL => 'onPostPackageInstall',
+        ];
+    }
+
+    public function onPostPackageInstall(PackageEvent $event)
+    {
+        $package = $event->getOperation()->getPackage();
+        $this->io->write('Installing sixshop extension ' . $package->getPrettyName());
+    }
+}