fix symfony event dispatcher unavailable

This commit is contained in:
sunxyw
2023-03-12 23:16:06 +08:00
committed by Jerry
parent c9e0495059
commit a47bcada01

View File

@@ -11,7 +11,7 @@ use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\Console\Event\ConsoleCommandEvent;
use Symfony\Component\Console\Event\ConsoleErrorEvent; use Symfony\Component\Console\Event\ConsoleErrorEvent;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use ZM\Exception\SingletonViolationException; use ZM\Exception\SingletonViolationException;
use ZM\Store\FileSystem; use ZM\Store\FileSystem;
@@ -43,16 +43,18 @@ final class ConsoleApplication extends Application
$this->registerGlobalOptions(); $this->registerGlobalOptions();
// 设置命令事件分发器 // 设置命令事件分发器(临时版)
$dispatcher = new EventDispatcher(); $this->setDispatcher(new class() implements EventDispatcherInterface {
$this->setDispatcher($dispatcher); public function dispatch(object $event, string $eventName = null): object
{
$eventName ??= $event::class;
// 注册命令执行前监听器 // 命令执行前
$dispatcher->addListener(ConsoleEvents::COMMAND, function (ConsoleCommandEvent $event) { if ($eventName === ConsoleEvents::COMMAND) {
/** @var ConsoleCommandEvent $event */
$input = $event->getInput(); $input = $event->getInput();
// 初始化内核 // 初始化内核
/** @var Framework $kernel */
$kernel = Framework::getInstance(); $kernel = Framework::getInstance();
$kernel->runtime_preferences = $kernel->runtime_preferences $kernel->runtime_preferences = $kernel->runtime_preferences
->withConfigDir($input->getOption('config-dir')) ->withConfigDir($input->getOption('config-dir'))
@@ -60,14 +62,19 @@ final class ConsoleApplication extends Application
->enableDebugMode($input->getOption('debug')) ->enableDebugMode($input->getOption('debug'))
->withLogLevel($input->getOption('log-level')); ->withLogLevel($input->getOption('log-level'));
$kernel->bootstrap(); $kernel->bootstrap();
}); }
// 注册命令执行错误监听器 // 命令执行错误
$dispatcher->addListener(ConsoleEvents::ERROR, function (ConsoleErrorEvent $event) { if ($eventName === ConsoleEvents::ERROR) {
/** @var ConsoleErrorEvent $event */
$e = $event->getError(); $e = $event->getError();
// 输出错误信息 // 输出错误信息
echo zm_internal_errcode('E00005') . "{$e->getMessage()} at {$e->getFile()}({$e->getLine()})" . PHP_EOL; echo zm_internal_errcode('E00005') . "{$e->getMessage()} at {$e->getFile()}({$e->getLine()})" . PHP_EOL;
exit(1); exit(1);
}
return $event;
}
}); });
// 设置单例,阻止后续实例化 // 设置单例,阻止后续实例化