logException($e); // Show error page $this->renderException($e); } /** * Log exception */ private function logException(\Throwable $e): void { $logFile = storage_path('logs/error.log'); $timestamp = date('Y-m-d H:i:s'); $message = "[{$timestamp}] " . get_class($e) . ": {$e->getMessage()}\n"; $message .= "File: {$e->getFile()}:{$e->getLine()}\n"; $message .= "Stack trace:\n{$e->getTraceAsString()}\n\n"; file_put_contents($logFile, $message, FILE_APPEND | LOCK_EX); } /** * Render exception */ private function renderException(\Throwable $e): void { try { $errorController = new ErrorController(); // Determine error type and render appropriate page if ($e instanceof \App\Core\Exceptions\NotFoundException) { $errorController->notFound(); } elseif ($e instanceof \App\Core\Exceptions\ForbiddenException) { $errorController->forbidden(); } elseif ($e instanceof \App\Core\Exceptions\UnauthorizedException) { $errorController->unauthorized(); } elseif ($e instanceof \App\Core\Exceptions\CsrfMismatchException) { $errorController->csrfMismatch(); } else { $errorController->serverError($e); } } catch (\Throwable $renderException) { // Fallback to basic error page if error rendering fails $this->renderFallbackException($e); } } /** * Render fallback exception (when error page rendering fails) */ private function renderFallbackException(\Throwable $e): void { http_response_code(500); if (is_development()) { $this->renderDevelopmentException($e); } else { $this->renderProductionException(); } } /** * Render development exception */ private function renderDevelopmentException(\Throwable $e): void { http_response_code(500); echo "\n"; echo "\n\n"; echo "Woles Framework Error\n"; echo "\n"; echo "\n"; echo "\n\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "

" . get_class($e) . "

\n"; echo "
\n"; echo "
\n"; echo "

" . htmlspecialchars($e->getMessage()) . "

\n"; echo "
\n"; echo "
\n"; echo "

File: " . htmlspecialchars($e->getFile()) . ":" . $e->getLine() . "

\n"; echo "
\n"; echo "
\n"; echo "
" . htmlspecialchars($e->getTraceAsString()) . "
\n"; echo "
\n"; echo "
\n"; echo "Go Home\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "\n\n"; } /** * Render production exception */ private function renderProductionException(): void { http_response_code(500); echo "\n"; echo "\n\n"; echo "Server Error - Woles Framework\n"; echo "\n"; echo "\n"; echo "\n\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "

500

\n"; echo "

Server Error

\n"; echo "

Something went wrong on our end.

\n"; echo "
\n"; echo "Return to Home\n"; echo "\n"; echo "
\n"; echo "
We're working to fix this issue. Please try again later.
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "\n\n"; } }