IPcalc-u-later/src/Exceptions/Exceptions.php
2024-11-25 20:23:54 +01:00

81 lines
No EOL
1.7 KiB
PHP

<?php
namespace Core\Exceptions;
use Core\Env\Env;
use Core\Http\Request;
use Throwable;
use Whoops\Handler\Handler;
use Whoops\Handler\JsonResponseHandler;
use Whoops\Handler\PlainTextHandler;
use Whoops\Handler\PrettyPageHandler;
use Whoops\Run as Whoops;
class Exceptions
{
/**
* Exceptions handler instance
*
* @var Whoops
*/
private static Whoops $instance;
/**
* Get exceptions handler instance
*
* @param \Core\Http\Request|null $request
* @return \Whoops\Run
*/
public static function instance(Request|null $request = null): Whoops
{
if (!isset(self::$instance)) {
$instance = new Whoops();
$instance->pushHandler(self::handler($request));
self::$instance = $instance;
}
return self::$instance;
}
/**
* Get correct handler
*
* @param \Core\Http\Request|null $request
* @return \Whoops\Handler\Handler
*/
private static function handler(Request|null $request): Handler
{
if (Env::get('debug')) {
if ($request?->is('post')) {
return new JsonResponseHandler();
}
return new PrettyPageHandler();
}
return new PlainTextHandler();
}
/**
* Catch all exceptions
*
* @param \Core\Http\Request $request
* @return void
*/
public static function catch(Request $request): void
{
self::instance($request)->register();
}
/**
* Catch single exception
*
* @param \Throwable $exception
* @return void
*/
public static function catchOne(Throwable $exception): void
{
self::instance()->handleException($exception);
}
}