Example #1
0
 /**
  * @param string $url
  * @return \MicroMuffin\Router\Route|null
  */
 public static function get($url)
 {
     $url_chunks = self::getUrlChunks($url);
     foreach (self::$routes as $route) {
         $route_chunks = self::getUrlChunks($route->getUrl());
         $diff = count($route_chunks) - count($url_chunks);
         if ($diff <= $route->getOptionalParameters() && $diff >= 0) {
             $match = true;
             $parameters = array();
             for ($i = 0; $match && $i < count($url_chunks) && $i < count($route_chunks); $i++) {
                 $url_chunk = $url_chunks[$i];
                 $route_chunk = $route_chunks[$i];
                 if (self::isParameter($route_chunk, self::SYMBOL_MANDATORY)) {
                     if (preg_match(self::PARAM_MANDATORY_REGEXP, $url_chunk)) {
                         $parameter_name = ltrim($route_chunk, self::SYMBOL_MANDATORY);
                         $parameters[$parameter_name] = $url_chunk;
                     } else {
                         $match = false;
                     }
                 } else {
                     if (self::isParameter($route_chunk, self::SYMBOL_OPTIONAL)) {
                         if (preg_match(self::PARAM_OPTIONAL_REGEXP, $url_chunk)) {
                             $parameter_name = ltrim($route_chunk, self::SYMBOL_OPTIONAL);
                             $parameters[$parameter_name] = $url_chunk;
                         } else {
                             $match = !empty($url_chunk);
                         }
                     } else {
                         if ($url_chunk != $route_chunk) {
                             $match = false;
                         }
                     }
                 }
             }
             if ($match) {
                 foreach ($route->getFilters() as $filter) {
                     foreach (self::$filters as $filter_ref) {
                         if ($filter_ref->name == $filter) {
                             $result = $filter_ref->exec();
                             if ($result != null) {
                                 if ($filter_ref->name == "login") {
                                     Controller::setIntented("/" . $url);
                                 }
                                 Controller::redirect($result);
                             }
                         }
                     }
                 }
                 $extRoute = clone $route;
                 $extRoute->setParameters($parameters);
                 return $extRoute;
             }
         }
     }
     return null;
 }