mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-03-18 13:14:52 +08:00
add container class_alias support (#189)
This commit is contained in:
parent
588fc919d9
commit
b2a6c2f5e0
@ -2,20 +2,22 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
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');
|
||||
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');
|
||||
|
||||
// 下面是 OneBot 相关类的全局别称
|
||||
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');
|
||||
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');
|
||||
|
||||
76
src/ZM/Container/ClassAliasHelper.php
Normal file
76
src/ZM/Container/ClassAliasHelper.php
Normal file
@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ZM\Container;
|
||||
|
||||
/**
|
||||
* 旨在帮助识别 class_alias 定义的类别名
|
||||
*/
|
||||
class ClassAliasHelper
|
||||
{
|
||||
/**
|
||||
* @var array{class:string,alias:string}[]
|
||||
*/
|
||||
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' => $class, 'alias' => $alias];
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断一个类是否是别名
|
||||
*
|
||||
* @param string $alias 别名
|
||||
*/
|
||||
public static function isAlias(string $alias): bool
|
||||
{
|
||||
return isset(self::$aliases[$alias]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取别名定义信息
|
||||
*
|
||||
* @param string $alias 别名
|
||||
* @return null|array{class:string,alias:string} 如果没有定义则返回 null
|
||||
*/
|
||||
public static function getAlias(string $alias): ?array
|
||||
{
|
||||
return self::$aliases[$alias] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据类名获取别名
|
||||
*
|
||||
* @param string $class 类名
|
||||
* @return null|array{class:string,alias:string} 如果没有定义则返回 null
|
||||
*/
|
||||
public static function getAliasByClass(string $class): ?array
|
||||
{
|
||||
foreach (self::$aliases as $alias) {
|
||||
if ($alias['class'] === $class) {
|
||||
return $alias;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据别名获取类名
|
||||
*
|
||||
* @param string $alias 别名
|
||||
* @return string 类名
|
||||
*/
|
||||
public static function getClass(string $alias): string
|
||||
{
|
||||
return self::$aliases[$alias]['class'] ?? $alias;
|
||||
}
|
||||
}
|
||||
@ -76,6 +76,9 @@ trait ContainerTrait
|
||||
public function getAlias(string $abstract): string
|
||||
{
|
||||
if (!isset(self::$aliases[$abstract])) {
|
||||
if (ClassAliasHelper::isAlias($abstract)) {
|
||||
return $this->getAlias(ClassAliasHelper::getAlias($abstract)['class']);
|
||||
}
|
||||
return $abstract;
|
||||
}
|
||||
|
||||
@ -439,7 +442,13 @@ trait ContainerTrait
|
||||
*/
|
||||
public function getLogPrefix(): string
|
||||
{
|
||||
return ($this->log_prefix ?? '[WorkerContainer(U)]') . ' ';
|
||||
$id = spl_object_id($this);
|
||||
// 级联容器的日志前缀为父容器的日志前缀加上当前容器的id
|
||||
if (method_exists($this, 'getParent')) {
|
||||
$parent = $this->getParent();
|
||||
$id = spl_object_id($parent) . '-' . $id;
|
||||
}
|
||||
return "[Container {$id}] ";
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user