public function reportExceptionHttp(\Exception $exception) { if ($exception instanceof RailsException) { $status = $exception->status(); } else { $status = 500; } $this->application->response()->setStatus($status); if ($this->application->config()['environment'] != 'production') { $contents = $this->createHtmlReport($exception); } else { $contents = $this->errorNotice($exception, $status); } $this->application->response()->setBody($contents); }
public function dispatch(\Exception $e, $currentController, $application) { if ($e instanceof \Rails\Exception\Exception) { $status = $e->status(); } else { $status = 500; } $application->response()->setStatus($status); $handlerClass = $application->config()['action_controller']['error_handler']; $handler = new $handlerClass($application); $paths = $currentController->actionView()->lookupContext()->paths; if (!$paths) { $paths = $application->config()['paths']['app']->expand('views'); } $handler->actionView()->lookupContext()->addPaths($paths); $handler->handleException($e); }
/** * @param Exception|Throwable $e * @return void */ private static function reportException($e) { Rails\ActionView\ActionView::clean_buffers(); $parmas = []; $params['status'] = $e instanceof Rails\Exception\ExceptionInterface ? $e->status() : 500; $params['report'] = Rails\Exception\Reporting\Reporter::create_report($e, $params); self::log()->message(Rails\Exception\Reporting\Reporter::cleanup_report($params['report'])); if (!self::application() || !self::application()->dispatcher()) { try { if (!self::application()) { self::_early_exception($e, $params['report']); } self::application()->setDispatcher(); } catch (Throwable $e) { self::_early_exception($e, $params['report']); } catch (Exception $e) { self::_early_exception($e, $params['report']); } } self::application()->dispatcher()->response()->headers()->status($params['status']); if (self::config()->action_controller->exception_handler && !self::config()->consider_all_requests_local) { try { self::$customExceptionHandlerRan = true; $handler = Rails\ActionController\ActionController::load_exception_handler(self::$config->action_controller->exception_handler, $params['status']); Rails::application()->set_controller($handler); $handler->handleException($e); } catch (Throwable $e) { self::_early_exception($e, $params['report']); } catch (Exception $e) { self::_early_exception($e, $params['report']); } } else { $renderer = new Rails\ActionController\Response\Error($e, $params); self::application()->dispatcher()->response()->headers()->contentType('html'); self::application()->dispatcher()->response()->body($renderer->render_view()->get_contents()); } self::application()->dispatcher()->respond(); exit; }