summaryrefslogtreecommitdiff
path: root/src/Router/Router.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Router/Router.php')
-rw-r--r--src/Router/Router.php109
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);
- }
-}