/** * General exception handler - Catches exception and displays error * * @param \Exception $e * @param bool $debug */ public static function filterException($e, $debug = false) { if ($e instanceof \System\Error\Request && $e::REDIRECTABLE && $e->location) { header('Location: ' . $e->location); exit(0); } if (!$debug) { header('HTTP/1.1 500 Internal Server Error'); echo "Fatal error"; exit(1); } if (!$e instanceof \System\Error) { return; } // Get error display definition try { $errors = \System\Settings::get('output', 'errors'); $cfg_ok = true; } catch (\System\Error\Config $exc) { return; } // Find error display template if (array_key_exists($e->get_name(), $errors)) { $errorPage = $errors[$e->get_name()]; } else { return; } if (self::on_cli()) { return; } // Setup output format for error page $errorPage['format'] = 'html'; $errorPage['render_with'] = 'basic'; if (!is_array($errorPage['partial'])) { $errorPage['partial'] = array($errorPage['partial']); } $request = \System\Http\Request::from_hit(); $response = $request->create_response($errorPage); $response->create_renderer(); foreach ($errorPage['partial'] as $partial) { $response->renderer->partial($partial, array('status' => $e->get_http_status(), 'desc' => $e, 'message' => $e->get_explanation(), 'wrap' => false)); } $response->status($e->get_http_status())->render()->send_headers()->send_content(); exit(1); }