Bicycle/System/Classes/HTTP/HTTPException.php
Egor Isaev b516ca07dc Initial commit: Bicycle PHP MVC micro-framework
Core MVC, HTTP client, Session, Cookie, Config, HTTPException — 111 PHPUnit tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 10:04:19 +03:00

56 lines
1.5 KiB
PHP

<?php
/**
* @package Bicycle
* @author Egor Isaev
* @description HTTP/HTTPException.php
* @copyright (c) 04/06/2026
*/
namespace System\Classes\HTTP;
use System\Classes\Core;
use System\Classes\MyException;
use System\Classes\Response;
class HTTPException extends MyException
{
protected int $_code = 0;
public function __construct(string $message = '', ?array $variables = null, ?\Throwable $previous = null, int $codeOverride = 0)
{
if ($codeOverride !== 0) {
$this->_code = $codeOverride;
}
parent::__construct($message, $variables, $this->_code, $previous);
}
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);
}
public function get_response(): 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;
}
}