_code = $code_override; } parent::__construct($message, $variables, $this->_code, $previous); } /** * Создаёт HTTPException_{code} или базовый класс для неизвестных кодов. * * @param int $code HTTP-код * @param string $message Сообщение * @param array|null $variables Карта замен для strtr * @param Throwable|null $previous Предыдущее исключение * @return static */ public static function factory(int $code, string $message = '', ?array $variables = null, ?Throwable $previous = null): static { $class = 'System\\Classes\\HTTP\\Exception\\HTTPException_' . $code; if (class_exists($class)) { return new $class($message, $variables, $previous); } return new static($message, $variables, $previous, $code); } /** * Формирует Response с телом из шаблона view/errors/{code}.html. * * @return Response */ public function getResponse(): Response { $code = $this->_code ?: 500; http_response_code($code); $response = new Response($code); $view = Core::findFile('view/errors', (string)$code, 'html'); if ($view) { ob_start(); $message = $this->getMessage(); include $view; $response->body(ob_get_clean()); } return $response; } }