예제 #1
0
 /**
  * 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);
 }