Example #1
0
 /**
  * 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);
 }