From 92043c38c73c30520001025ff99412c42c7248f5 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 27 May 2026 22:51:37 -0400 Subject: [PATCH] live error handlers updated. --- src/Bootstrap.php | 16 +++- src/Framework/ErrorHandler.php | 38 +++++++- src/Framework/Middleware/ErrorMiddleware.php | 6 ++ src/Framework/SiteHelper.php | 92 ++++++++++++++++++++ 4 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 src/Framework/SiteHelper.php diff --git a/src/Bootstrap.php b/src/Bootstrap.php index eca37a1..044f25b 100644 --- a/src/Bootstrap.php +++ b/src/Bootstrap.php @@ -12,6 +12,7 @@ use IOcornerstone\Psr4AutoloaderClass; use IOcornerstone\Framework\{ Registry as Reg, Console, + Configure, CliDefaults, ErrorHandler, APICacheAge, @@ -62,6 +63,8 @@ $myErrorHandler->register(); Reg::set('loader', $loader); Reg::set('di', new DI()); // Initialize our Dependency Injector Reg::set('container', new AutowireContainer()); +Reg::set('error_handler', $myErrorHandler); +Reg::set('debug', $debug); Console::setupConsoleVars(); // Copy CLI Args into $_GET @@ -73,9 +76,16 @@ function isLive(): bool { if (Configure::has('IOcornerstone', 'live')) { $live = Configure::get('IOcornerstone', 'live'); - } - if ($live === null) { - $live = true; + + if ($live === null) { + $live = true; + } + + $debugger = ($live) ? false : true; + Reg::get('error_handler')->resetDebugger($debugger); + } else { + echo "Warning: LIVE not Set in Config!!!"; + $live = Reg::get('debug') ? false : true; } return (bool) $live; } diff --git a/src/Framework/ErrorHandler.php b/src/Framework/ErrorHandler.php index ca7b2b9..c608f3c 100644 --- a/src/Framework/ErrorHandler.php +++ b/src/Framework/ErrorHandler.php @@ -11,14 +11,26 @@ use Throwable; final class ErrorHandler { private bool $hasError = false; + private string $myErr = "An internal error occurred. Please try again later."; public function __construct( private bool $debug = false, ) { define('WORD_WRAP_CHRS', 80); // Letters before Line Wrap on Errors } + + public function setMyErr(string $em): void + { + $this->myErr = $em; + } + + public function resetDebugger(bool $debug) + { + $this->debug = $debug; + $this->setErrors(); + } - public function register(): void + private function setErrors(): void { if ($this->debug) { error_reporting(E_ALL); @@ -37,7 +49,11 @@ final class ErrorHandler // } error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED); } + } + public function register(): void + { + $this->setErrors(); set_error_handler([$this, 'handleError']); set_exception_handler([$this, 'handleException']); register_shutdown_function([$this, 'handleShutdown']); @@ -309,6 +325,22 @@ final class ErrorHandler return $msg; } + public function renderProdMessage(): string { + if (Console::isConsole()) { + return $this->myErr; + } + if ($this->isJsonRequest()) { + $this->setJsonHeaders(); + + return json_encode([ + 'error' => [ + 'message' => 'Internal Server Error' + ] + ]); + } + return "

" . $this->myErr . "

"; + } + private function renderDebug(Throwable $e): void { echo "

Uncaught " . $this->getErrorType($e) . "

"; @@ -317,7 +349,7 @@ final class ErrorHandler private function renderProductionConsole(): void { - echo "An internal error occurred. Please try again later."; + echo $this->myErr; } /** @@ -325,7 +357,7 @@ final class ErrorHandler */ private function renderProduction(): void { - echo "

An internal error occurred. Please try again later.

"; + echo "

" . $this->myErr . "

"; } private function setLoggerByLevel(Throwable $e): void diff --git a/src/Framework/Middleware/ErrorMiddleware.php b/src/Framework/Middleware/ErrorMiddleware.php index 374cce7..4015c79 100644 --- a/src/Framework/Middleware/ErrorMiddleware.php +++ b/src/Framework/Middleware/ErrorMiddleware.php @@ -12,6 +12,7 @@ use IOcornerstone\Framework\Http\{ Response, Stream }; +use IOcornerstone\Framework\Registry as Reg; final class ErrorMiddleware implements MiddlewareInterface { @@ -44,6 +45,11 @@ final class ErrorMiddleware implements MiddlewareInterface private function formatException(\Throwable $e): string { + + if (isLive()) { + return Reg::get('error_handler')->renderProdMessage(); + } + return sprintf( "%s\n\n%s", $e->getMessage(), diff --git a/src/Framework/SiteHelper.php b/src/Framework/SiteHelper.php new file mode 100644 index 0000000..223bfc9 --- /dev/null +++ b/src/Framework/SiteHelper.php @@ -0,0 +1,92 @@ +