/** * @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; }