rootDirectory, '/Template'); $container = (new GenericContainer()); $container ->alias(RouterInterface::class, GenericRouter::class) ->alias(ContainerInterface::class, GenericContainer::class) ->alias(LoggerInterface::class, LogContainer::class) ->add(GenericContainer::class, fn($container) => $container) ->add(AppConfig::class, fn() => $appConfig) ->add(GenericRouter::class) ->add(ViewHelper::class) ->add(LogContainer::class); $this->dependencies($container); $this->render($container); } private function render(GenericContainer $container): void { $request = new GenericRequest( MethodEnum::from($_SERVER['REQUEST_METHOD']), $_SERVER['REQUEST_URI'], $_REQUEST, ); $router = $container->get(RouterInterface::class); $log = $container->get(LogContainer::class); try { $response = $router->dispatch($request); } catch (\Throwable $e) { $response = new GenericResponse( $e->getMessage(), StatusEnum::NOT_FOUND ); //$response = $container->get(RouterConfig::class)->getExceptionRoute()->getController()::exception($e); } http_response_code($response->getStatus()->value); foreach ($response->getHeaders() as $header) { header($header); } echo $response->getBody(); echo '
';
foreach ($log->getLogs() as $log) {
echo sprintf('%s
', $log);
}
echo '';
}
protected function addControllers(ContainerInterface $container, array $controllers): void
{
$config = new RouterConfig();
foreach ($controllers as $controller) {
$container->add($controller);
$config->addController($controller);
}
$container->add(RouterConfig::class, fn() => $config);
}
protected function dependencies(ContainerInterface $container): void
{
}
}