49 lines
1.2 KiB
PHP
49 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http;
|
|
|
|
use App\Core\EnvironmentLoader;
|
|
use App\Enums\Environment;
|
|
use Laminas\Diactoros\ServerRequest;
|
|
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
|
|
use League\Route\Router;
|
|
use Whoops\Handler\PrettyPageHandler;
|
|
use Whoops\Run;
|
|
|
|
/** @codeCoverageIgnore */
|
|
final readonly class Kernel
|
|
{
|
|
public function __construct(
|
|
private EnvironmentLoader $environmentLoader,
|
|
private ExceptionHandler $exceptionHandler,
|
|
private ServerRequest $serverRequest,
|
|
private Router $router,
|
|
private SapiEmitter $sapiEmitter,
|
|
) {
|
|
}
|
|
|
|
public function run(): void
|
|
{
|
|
$this->environmentLoader->load();
|
|
$this->setExceptionHandler();
|
|
|
|
$response = $this->router->dispatch($this->serverRequest);
|
|
$this->sapiEmitter->emit($response);
|
|
}
|
|
|
|
private function setExceptionHandler(): void
|
|
{
|
|
if (Environment::Production->isCurrent()) {
|
|
set_exception_handler($this->exceptionHandler->handle(...));
|
|
|
|
return;
|
|
}
|
|
|
|
$whoops = new Run();
|
|
$whoops->pushHandler(new PrettyPageHandler());
|
|
$whoops->register();
|
|
}
|
|
}
|