From a813e80b3250f6db981ae213bf52bb183dfe2619 Mon Sep 17 00:00:00 2001 From: sunxyw Date: Sun, 25 Dec 2022 18:15:07 +0800 Subject: [PATCH] add class alias support --- src/Globals/global_class_alias.php | 36 ++++----- src/Globals/global_class_alias_helper.php | 21 ----- src/Module/Example/Hello123.php | 3 +- .../ClassAliasHelperGenerateCommand.php | 28 ------- src/ZM/Container/AliasBasedAutowiring.php | 34 -------- src/ZM/Container/AliasDefinitionSource.php | 27 +++++++ src/ZM/Container/ClassAliasHelper.php | 79 ------------------- src/ZM/Container/ContainerHolder.php | 11 ++- 8 files changed, 50 insertions(+), 189 deletions(-) delete mode 100644 src/Globals/global_class_alias_helper.php delete mode 100644 src/ZM/Command/Generate/ClassAliasHelperGenerateCommand.php delete mode 100644 src/ZM/Container/AliasBasedAutowiring.php create mode 100644 src/ZM/Container/AliasDefinitionSource.php delete mode 100644 src/ZM/Container/ClassAliasHelper.php diff --git a/src/Globals/global_class_alias.php b/src/Globals/global_class_alias.php index 8bcbcdaa..0d9c677b 100644 --- a/src/Globals/global_class_alias.php +++ b/src/Globals/global_class_alias.php @@ -2,24 +2,22 @@ declare(strict_types=1); -use ZM\Container\ClassAliasHelper; - -ClassAliasHelper::addAlias(\ZM\Annotation\Framework\BindEvent::class, 'BindEvent'); -ClassAliasHelper::addAlias(\ZM\Annotation\Framework\Init::class, 'Init'); -ClassAliasHelper::addAlias(\ZM\Annotation\Framework\Setup::class, 'Setup'); -ClassAliasHelper::addAlias(\ZM\Annotation\Http\Controller::class, 'Controller'); -ClassAliasHelper::addAlias(\ZM\Annotation\Http\Route::class, 'Route'); -ClassAliasHelper::addAlias(\ZM\Annotation\Middleware\Middleware::class, 'Middleware'); -ClassAliasHelper::addAlias(\ZM\Annotation\OneBot\BotCommand::class, 'BotCommand'); -ClassAliasHelper::addAlias(\ZM\Annotation\OneBot\BotEvent::class, 'BotEvent'); -ClassAliasHelper::addAlias(\ZM\Annotation\OneBot\CommandArgument::class, 'CommandArgument'); -ClassAliasHelper::addAlias(\ZM\Annotation\Closed::class, 'Closed'); -ClassAliasHelper::addAlias(\ZM\Plugin\ZMPlugin::class, 'ZMPlugin'); -ClassAliasHelper::addAlias(\OneBot\V12\Object\OneBotEvent::class, 'OneBotEvent'); -ClassAliasHelper::addAlias(\ZM\Context\BotContext::class, 'BotContext'); +class_alias(\ZM\Annotation\Framework\BindEvent::class, 'BindEvent'); +class_alias(\ZM\Annotation\Framework\Init::class, 'Init'); +class_alias(\ZM\Annotation\Framework\Setup::class, 'Setup'); +class_alias(\ZM\Annotation\Http\Controller::class, 'Controller'); +class_alias(\ZM\Annotation\Http\Route::class, 'Route'); +class_alias(\ZM\Annotation\Middleware\Middleware::class, 'Middleware'); +class_alias(\ZM\Annotation\OneBot\BotCommand::class, 'BotCommand'); +class_alias(\ZM\Annotation\OneBot\BotEvent::class, 'BotEvent'); +class_alias(\ZM\Annotation\OneBot\CommandArgument::class, 'CommandArgument'); +class_alias(\ZM\Annotation\Closed::class, 'Closed'); +class_alias(\ZM\Plugin\ZMPlugin::class, 'ZMPlugin'); +class_alias(\OneBot\V12\Object\OneBotEvent::class, 'OneBotEvent'); +class_alias(\ZM\Context\BotContext::class, 'BotContext'); // 下面是 OneBot 相关类的全局别称 -ClassAliasHelper::addAlias(\OneBot\Driver\Event\WebSocket\WebSocketOpenEvent::class, 'WebSocketOpenEvent'); -ClassAliasHelper::addAlias(\OneBot\Driver\Event\WebSocket\WebSocketCloseEvent::class, 'WebSocketCloseEvent'); -ClassAliasHelper::addAlias(\OneBot\Driver\Event\WebSocket\WebSocketMessageEvent::class, 'WebSocketMessageEvent'); -ClassAliasHelper::addAlias(\OneBot\Driver\Event\Http\HttpRequestEvent::class, 'HttpRequestEvent'); +class_alias(\OneBot\Driver\Event\WebSocket\WebSocketOpenEvent::class, 'WebSocketOpenEvent'); +class_alias(\OneBot\Driver\Event\WebSocket\WebSocketCloseEvent::class, 'WebSocketCloseEvent'); +class_alias(\OneBot\Driver\Event\WebSocket\WebSocketMessageEvent::class, 'WebSocketMessageEvent'); +class_alias(\OneBot\Driver\Event\Http\HttpRequestEvent::class, 'HttpRequestEvent'); diff --git a/src/Globals/global_class_alias_helper.php b/src/Globals/global_class_alias_helper.php deleted file mode 100644 index 7a250c24..00000000 --- a/src/Globals/global_class_alias_helper.php +++ /dev/null @@ -1,21 +0,0 @@ -info("收到了 {$event->getType()}.{$event->getDetailType()} 事件"); } diff --git a/src/ZM/Command/Generate/ClassAliasHelperGenerateCommand.php b/src/ZM/Command/Generate/ClassAliasHelperGenerateCommand.php deleted file mode 100644 index 76760c92..00000000 --- a/src/ZM/Command/Generate/ClassAliasHelperGenerateCommand.php +++ /dev/null @@ -1,28 +0,0 @@ - $c) { - $str .= "class_alias({$c['class']}::class, '{$a}');\n"; - } - file_put_contents(FRAMEWORK_ROOT_DIR . '/src/Globals/global_class_alias_helper.php', $str); - $this->info('生成成功'); - return Command::SUCCESS; - } -} diff --git a/src/ZM/Container/AliasBasedAutowiring.php b/src/ZM/Container/AliasBasedAutowiring.php deleted file mode 100644 index 095a459a..00000000 --- a/src/ZM/Container/AliasBasedAutowiring.php +++ /dev/null @@ -1,34 +0,0 @@ -source = $source; - } - - public function getDefinition(string $name): ?Definition - { - // 如果是别名,使用类名获取定义 - if (ClassAliasHelper::isAlias($name)) { - $class = ClassAliasHelper::getAlias($name); - } else { - $class = $name; - } - return $this->source->getDefinition($class); - } - - public function getDefinitions(): array - { - return $this->source->getDefinitions(); - } -} diff --git a/src/ZM/Container/AliasDefinitionSource.php b/src/ZM/Container/AliasDefinitionSource.php new file mode 100644 index 00000000..4d4ebed4 --- /dev/null +++ b/src/ZM/Container/AliasDefinitionSource.php @@ -0,0 +1,27 @@ +getName(); + // 如果反射类名和类名不一致,说明是别名,使用类名获取定义 + return $ref === $name ? null : new Reference($ref); + } + + public function getDefinitions(): array + { + return []; + } +} diff --git a/src/ZM/Container/ClassAliasHelper.php b/src/ZM/Container/ClassAliasHelper.php deleted file mode 100644 index 4232e023..00000000 --- a/src/ZM/Container/ClassAliasHelper.php +++ /dev/null @@ -1,79 +0,0 @@ - - */ - private static array $aliases = []; - - /** - * 添加一个类别名 - * - * @param string $class 类名 - * @param string $alias 别名 - */ - public static function addAlias(string $class, string $alias): void - { - class_alias($class, $alias); - self::$aliases[$alias] = $class; - } - - /** - * 判断一个类是否是别名 - * - * @param string $alias 别名 - */ - public static function isAlias(string $alias): bool - { - return isset(self::$aliases[$alias]); - } - - /** - * 获取别名定义信息 - * - * @param string $alias 别名 - * @return null|class-string 如果没有定义则返回 null - */ - public static function getAlias(string $alias): ?string - { - return self::$aliases[$alias] ?? null; - } - - /** - * 根据类名获取别名 - * - * @param string $class 类名 - * @return null|class-string 如果没有定义则返回 null - */ - public static function getAliasByClass(string $class): ?string - { - return array_search($class, self::$aliases, true) ?: null; - } - - /** - * 根据别名获取类名 - * - * @param string $alias 别名 - * @return string 类名 - */ - public static function getClass(string $alias): string - { - return self::$aliases[$alias] ?? $alias; - } - - /** - * 获取所有别名定义信息 - */ - public static function getAllAlias(): array - { - return self::$aliases; - } -} diff --git a/src/ZM/Container/ContainerHolder.php b/src/ZM/Container/ContainerHolder.php index c60a26e7..57ae714a 100644 --- a/src/ZM/Container/ContainerHolder.php +++ b/src/ZM/Container/ContainerHolder.php @@ -28,13 +28,12 @@ class ContainerHolder private static function buildContainer(): Container { $builder = new ContainerBuilder(); - $sources = [ - new DI\Definition\Source\ReflectionBasedAutowiring(), - new DI\Definition\Source\AttributeBasedAutowiring(), + $builder->addDefinitions( + new AliasDefinitionSource(), new DI\Definition\Source\DefinitionArray(config('container.definitions', [])), - ]; - $source = new DI\Definition\Source\SourceChain($sources); - $builder->addDefinitions(new AliasBasedAutowiring($source)); + ); + $builder->useAutowiring(true); + $builder->useAttributes(true); return $builder->build(); } }