Bicycle/System/Classes/MyException.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

55 lines
1.5 KiB
PHP

<?php
/**
* @package Bicycle
* @author Egor Isaev
* @description MyException.php
* @copyright (c) 03/06/2026
*/
namespace System\Classes;
use Exception;
use Throwable;
class MyException extends Exception
{
/**
* @param $message
* @param array|null $variables
* @param $code
* @param Exception|null $previous
*/
public function __construct(string $message = "", ?array $variables = null, int $code = 0, ?Throwable $previous = null)
{
if ($variables) {
$message = strtr($message, $variables);
}
parent::__construct($message, $code, $previous);
}
public static function handler(Throwable $e): void
{
$httpCode = ($e->getCode() >= 100 && $e->getCode() <= 599) ? $e->getCode() : 500;
http_response_code($httpCode);
if (Core::$environment >= Core::DEVELOPMENT) {
$class = get_class($e);
$code = $e->getCode();
$message = $e->getMessage();
$file_ = $e->getFile();
$line = $e->getLine();
$xdebug_message = property_exists($e, 'xdebug_message') ? $e->xdebug_message : '';
$view = Core::findFile('view/exception', 'error', 'html');
if ($view) {
include $view;
return;
}
}
if (($view500 = Core::findFile('view/errors', '500', 'html')) !== false) {
include $view500;
}
}
}