diff --git a/kiri-engine/Error/ErrorHandler.php b/kiri-engine/Error/ErrorHandler.php index 037446d5..b2e30aea 100644 --- a/kiri-engine/Error/ErrorHandler.php +++ b/kiri-engine/Error/ErrorHandler.php @@ -49,15 +49,35 @@ class ErrorHandler extends Component implements ErrorInterface /** - * 错误处理注册 + * @param array|null $callback + * @return void */ - public function register() + public function registerExceptionHandler(?array $callback): void { - set_exception_handler([$this, 'exceptionHandler']); - set_error_handler([$this, 'errorHandler']); - register_shutdown_function([$this, 'shutdown']); + set_exception_handler($callback ?? [$this, 'exceptionHandler']); } + + /** + * @param array|null $callback + * @return void + */ + public function registerErrorHandler(?array $callback): void + { + set_error_handler($callback ?? [$this, 'errorHandler']); + } + + + /** + * @param array|null $callback + * @return void + */ + public function registerShutdownHandler(?array $callback): void + { + register_shutdown_function($callback ?? [$this, 'shutdown']); + } + + /** * @return void * @throws ContainerExceptionInterface diff --git a/kiri-engine/Main.php b/kiri-engine/Main.php index 0b96a3b7..ffac2e00 100644 --- a/kiri-engine/Main.php +++ b/kiri-engine/Main.php @@ -23,6 +23,8 @@ use Symfony\Component\Console\{Application as ConsoleApplication, Output\OutputInterface }; use Kiri\Di\LocalService; +use Kiri\Exception\ConfigException; +use Kiri\Error\ErrorHandler; /** @@ -43,6 +45,21 @@ class Main extends BaseMain public string $state = ''; + + /** + * @return void + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + * @throws ConfigException + */ + public function init(): void + { + $error = $this->container->get(ErrorHandler::class); + $error->registerShutdownHandler(Config::get('error.shutdown', [])); + $error->registerExceptionHandler(Config::get('error.exception', [])); + $error->registerErrorHandler(Config::get('error.error', [])); + } + /** * @param string $service * @return $this