diff --git a/src/ZM/Command/Command.php b/src/ZM/Command/Command.php index 066f2333..1152a0af 100644 --- a/src/ZM/Command/Command.php +++ b/src/ZM/Command/Command.php @@ -7,6 +7,7 @@ namespace ZM\Command; use Psr\Log\LoggerInterface; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use ZM\Framework; abstract class Command extends \Symfony\Component\Console\Command\Command implements LoggerInterface { @@ -62,4 +63,9 @@ abstract class Command extends \Symfony\Component\Console\Command\Command implem * @return int 命令执行结果 {@see self::SUCCESS} 或 {@see self::FAILURE} 或 {@see self::INVALID} */ abstract protected function handle(): int; + + protected function emitBootstrap(string $class): void + { + Framework::getInstance()->bootstrap($class); + } } diff --git a/src/ZM/Command/Plugin/PluginCommand.php b/src/ZM/Command/Plugin/PluginCommand.php index 8618aa4f..d72c20e4 100644 --- a/src/ZM/Command/Plugin/PluginCommand.php +++ b/src/ZM/Command/Plugin/PluginCommand.php @@ -13,16 +13,15 @@ use ZM\Plugin\PluginManager; abstract class PluginCommand extends Command { - protected array $bootstrappers = [ - BootStrap\RegisterLogger::class, - Bootstrap\SetInternalTimezone::class, - Bootstrap\LoadConfiguration::class, - Bootstrap\LoadPlugins::class, - ]; - /** @var null|string 动态插件和 Phar 插件的加载目录 */ protected ?string $plugin_dir = null; + public function __construct(string $name = null) + { + parent::__construct($name); + $this->emitBootstrap(Bootstrap\LoadPlugins::class); + } + /** * 插件名称合规验证器 */ diff --git a/src/ZM/ConsoleApplication.php b/src/ZM/ConsoleApplication.php index 93bcc569..30c42cd0 100644 --- a/src/ZM/ConsoleApplication.php +++ b/src/ZM/ConsoleApplication.php @@ -79,13 +79,13 @@ final class ConsoleApplication extends Application protected function doRunCommand(Command $command, InputInterface $input, OutputInterface $output): int { // 初始化内核 - $kernel = Framework::getInstance(); - $kernel->runtime_preferences = $kernel->runtime_preferences + $framework = Framework::getInstance(); + $framework->runtime_preferences = $framework->runtime_preferences ->withConfigDir($input->getOption('config-dir')) ->withEnvironment($input->getOption('env')) ->enableDebugMode($input->getOption('debug')) ->withLogLevel($input->getOption('log-level')); - $kernel->bootstrap(); + $framework->bootstrap(); return parent::doRunCommand($command, $input, $output); } diff --git a/src/ZM/Framework.php b/src/ZM/Framework.php index 74595496..e9d484dd 100644 --- a/src/ZM/Framework.php +++ b/src/ZM/Framework.php @@ -262,8 +262,17 @@ class Framework } } - public function bootstrap(): void + /** + * 执行初始化的函数列表 + * + * @param null|string $bootstrapper 要运行的 bootstrapper + */ + public function bootstrap(?string $bootstrapper = null): void { + if ($bootstrapper !== null) { + (new $bootstrapper())->bootstrap($this->runtime_preferences); + return; + } foreach ($this->bootstrappers as $bootstrapper) { /* @var Bootstrapper $bootstrapper */ (new $bootstrapper())->bootstrap($this->runtime_preferences);