81 lines
No EOL
1.7 KiB
PHP
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);
|
|
}
|
|
} |