request = $request; $this->response = $response; } public function get($path, $callback) { $this->routes['get'][$path] = $callback; } public function post($path, $callback) { $this->routes['post'][$path] = $callback; } /* in aceasta functie se identifica path ul catre fisier, metoda (GET/POST) si se identifica un "routes" callback ul (in general controller ul) pe care trebuie sa l returneze astfel, in call_user_function, se ofera clasa de tip constructor si request ul de la user ca dupa controller ul sa se ocupe de restul */ public function resolve() { $path = $this->request->getPath(); $method = $this->request->method(); $callback = $this->routes[$method][$path] ?? false; if (!$callback) { throw new NotFoundException(); } if (is_string($callback)) { return $this->renderView($callback); } if (is_array($callback)) { $controller = new $callback[0](); Application::$app->controller = $controller; $controller->action = $callback[1]; $callback[0] = $controller; foreach($controller->getMiddlewares() as $middleware){ $middleware->execute(); } } return call_user_func($callback, $this->request, $this->response); } //layout ne va ajuta sa identificam ce fel de layout trebuie sa aiba pagina pe care o trimitem (elemente extra in afara de continut: navbar, elemente din baza de date etc) protected function layoutContent() { $layout = Application::$app->layout; if (Application::$app->controller) { $layout = Application::$app->controller->layout; } ob_start(); include_once Application::$ROOT_DIR . "/views/layouts/$layout.php"; return ob_get_clean(); } public function renderView($view, $params = []) { $layoutContent = $this->layoutContent(); $viewContent = $this->renderOnlyView($view, $params); return str_replace('{{content}}', $viewContent, $layoutContent); } public function renderContent($viewContent) { $layoutContent = $this->layoutContent(); return str_replace('{{content}}', $viewContent, $layoutContent); } protected function renderOnlyView($view, $params) { foreach ($params as $key => $value) { $$key = $value; } ob_start(); include_once Application::$ROOT_DIR . "/views/$view.php"; return ob_get_clean(); } }