/** * Обработка переданного URL * Dispatch received URL */ public static function Dispatch($requestedUrl = null) { // Если URL не передан, берем его из REQUEST_URI if ($requestedUrl === null) { $uri = reset(explode('?', $_SERVER["REQUEST_URI"])); $requestedUrl = urldecode(rtrim($uri, '/')); } self::$requestedUrl = $requestedUrl; // если URL и маршрут полностью совпадают if (isset(self::$routes[$requestedUrl])) { self::$params = self::SplitUrl(self::$routes[$requestedUrl]); return self::ExecuteAction(); } foreach (self::$routes as $route => $uri) { // Заменяем wildcards на рег. выражения if (strpos($route, ':') !== false) { $route = str_replace(':any', '(.+)', str_replace(':num', '([0-9]+)', $route)); } if (preg_match('#^' . $route . '$#', $requestedUrl)) { if (strpos($uri, '$') !== false && strpos($route, '(') !== false) { $uri = preg_replace('#^' . $route . '$#', $uri, $requestedUrl); } self::$params = self::SplitUrl($uri); break; // URL обработан! } } return self::ExecuteAction(); }