diff options
Diffstat (limited to 'src/Router/Router.php')
| -rw-r--r-- | src/Router/Router.php | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/src/Router/Router.php b/src/Router/Router.php deleted file mode 100644 index 6859771..0000000 --- a/src/Router/Router.php +++ /dev/null @@ -1,109 +0,0 @@ -<?php - -namespace App\Router; - -use App\Errors\ErrorResponse; -use App\Errors\Exception; -use App\Singleton; -use App\Support\Logger; -use Matrix\Enums\ErrorCode; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Exception\MethodNotAllowedException; -use Symfony\Component\Routing\Exception\ResourceNotFoundException; -use Symfony\Component\Routing\Loader\Configurator\RouteConfigurator; -use Symfony\Component\Routing\Matcher\UrlMatcher; -use Symfony\Component\Routing\RequestContext; -use Symfony\Component\Routing\RouteCollection; - -class Router -{ - use Singleton; - - private RouteCollection $routes; - private RouteConfigurator $configurator; - - public function __construct() - { - $this->routes = new RouteCollection(); - $this->configurator = new RouteConfigurator($this->routes, $this->routes); - - $this->addRoutes(); - } - - /** - * match the current url against the routes. - * also add preflight CORS headers on OPTIONS requests. - */ - public function run(): Response - { - $request = Request::createFromGlobals(); - - $response = new Response(); - $response->headers->add([ - "Access-Control-Allow-Origin" => "*", - "Access-Control-Allow-Methods" => "GET, POST, PUT, DELETE, OPTIONS, PATCH, HEAD", - "Access-Control-Allow-Headers" => "X-Requested-With, Content-Type, Authorization", - ]); - - if ($request->isMethod("OPTIONS")) { - return $response; - } - - $context = new RequestContext(); - $context->fromRequest($request); - - try { - $matcher = new UrlMatcher($this->routes, $context); - $match = $matcher->matchRequest($request); - - $class = $match["_controller"][0]; - $method = $match["_controller"][1]; - - $request->attributes->add(array_diff_key( - $match, - array_flip(["_controller", "_route"]) - )); - - Logger::logRequestToFile($request); - - $response = (new $class)->$method($request); - } catch (Exception $exception) { - $response = ErrorResponse::fromException($exception); - } catch (ResourceNotFoundException $exception) { - $response = new ErrorResponse(ErrorCode::NOT_FOUND, "404", Response::HTTP_NOT_FOUND); - } catch (MethodNotAllowedException $exception) { - $response = new ErrorResponse(ErrorCode::FORBIDDEN, "403", Response::HTTP_FORBIDDEN); - } catch (\LogicException $exception) { // display logic exceptions normally - throw $exception; - } catch (\Exception $exception) { - $response = new ErrorResponse( - ErrorCode::UNKNOWN, - $exception->getMessage() ?: "Unknown error occured", - Response::HTTP_INTERNAL_SERVER_ERROR - ); - } catch (\Error $error) { - error_log($error->getMessage() ?: "Unknown error occured"); - - $response = new ErrorResponse( - ErrorCode::UNKNOWN, - $error->getMessage() ?: "Unknown error occured", - Response::HTTP_INTERNAL_SERVER_ERROR - ); - } - - return $response; - } - - /** - * add routes from the routes file - */ - private function addRoutes(): void - { - $routesClientServer = include_once(__DIR__ . "/routes_client_server.php"); - $routesClientServer($this->configurator); - - $routesServerServer = include_once(__DIR__ . "/routes_server_server.php"); - $routesServerServer($this->configurator); - } -} |
