/** * Executa la funció del controlador corresponent a la ruta. * * @param String $url HTTP URL que fa la petició * @param Object $request Request Object * @param Object $response Response Object * @return void */ public function dispatch($url, &$request, &$response) { // Seteja la URL que volem cercar $this->setUrl($url); // Inicialitzem variables $route = array(); $i = 0; // Agafem tots els patrons del method que s'utilitza per fer la petció HTTP (GET | POST | ... ) $patterns = array_keys($this->url_patterns[$request->method]); $nroutes = sizeof($this->url_patterns[$request->method]); // Cerquem fins trobar coincidencies amb els nostres patrons while (!$trobat && $i < $nroutes) { $pattern = new Pattern(array_shift($patterns)); if ($pattern->haveRegEx()) { $trobat = preg_match("/^" . $pattern->to_String() . "\$/", $this->url); } else { $trobat = $pattern->to_String() == $this->url; } $i++; } // Extreiem de la URL els parametres que hem definit al patró // els desem dins de l'objecte Request. if ($trobat && $pattern->haveRegEx()) { $params = $pattern->getRegExParams($url); foreach ($params as $key => $value) { $request->params['GET'][$key] = $value; } } // Set the route if founded if ($trobat) { $route = $this->url_patterns[$request->method][$pattern->original]; } // Call Controller and Action, if $route not defined show 404 $this->call($route, $request, $response); }