configDir; } /** * @param string $configDir */ public function setConfigDir(string $configDir): void { $this->configDir = $configDir; } /** * @return string */ public function getProjectDir(): string { return $this->projectDir; } /** * @param string $projectDir */ public function setProjectDir(string $projectDir): void { $this->projectDir = $projectDir; } /** * @return string */ public function getTemplateDir(): string { return $this->templateDir; }/** * @param string $templateDir */ public function setTemplateDir(string $templateDir): void { $this->templateDir = $templateDir; } public function handle(): Response { $this->parseDotEnv($this->getProjectDir() . '/.env'); $routes = $this->parseRoutes($this->getConfigDir(), '/routes.yaml'); $request = $this->parseRequest(); return $this->createResponse($request, $routes); } private function parseDotEnv(string $path): void { $dotenv = new Dotenv(); $dotenv->loadEnv($path); } private function parseRoutes(string $dir, string $file): RouteCollection { $routeloader = new YamlFileLoader(new FileLocator($dir)); return $routeloader->load($file); } private function parseRequest(): Request { return Request::createFromGlobals(); } public function getDbCon(): Connection { $db = DriverManager::getConnection(['url' => $_ENV['DATABASE']]); } private function createResponse($request, $routes): Response { $requestContext = RequestContext::fromUri($request->getUri()); $matcher = new UrlMatcher($routes, $requestContext); $method = $matcher->match($request->getPathInfo()); $controller = explode('::', $method['_controller']); $controllerObj = new ('\\' . $controller[0])($request, $this); $action = $controller[1]; $response = $controllerObj->$action(); if ($response instanceof Response) { return $response; } else { throw new InvalidArgumentException(); } } }