Example #1
0
 /**
  * Обработка переданного 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();
 }