Example #1
0
 private static function getRouteAlias()
 {
     if ($alias = Cache::get('think_route_alias')) {
         return $alias;
     }
     // 获取路由定义
     $rules = Route::getRules();
     if (empty($rules)) {
         return [];
     }
     foreach ($rules as $rule => $val) {
         if (!empty($val['routes'])) {
             foreach ($val['routes'] as $key => $route) {
                 if (is_numeric($key)) {
                     $key = array_shift($route);
                 }
                 $route = $route[0];
                 if (is_array($route)) {
                     $route = implode('\\', $route);
                 } elseif ($route instanceof \Closure) {
                     continue;
                 } elseif (strpos($route, '?')) {
                     $route = strstr($route, '?', true);
                 }
                 $var = self::parseVar($rule . '/' . $key);
                 $alias[$route][] = [$rule . '/' . $key, $var];
             }
         } else {
             $route = $val['route'];
             if (is_array($route)) {
                 $route = implode('\\', $route);
             } elseif ($route instanceof \Closure) {
                 continue;
             } elseif (strpos($route, '?')) {
                 $route = strstr($route, '?', true);
             }
             $var = self::parseVar($rule);
             $alias[$route][] = [$rule, $var];
         }
     }
     Cache::set('think_route_alias', $alias);
     return $alias;
 }
Example #2
0
 private static function getRouteAlias()
 {
     if ($alias = Cache::get('think_route_alias')) {
         return $alias;
     }
     // 获取路由定义
     $rules = Route::getRules();
     foreach ($rules as $rule => $val) {
         if (!empty($val['routes'])) {
             foreach ($val['routes'] as $key => $route) {
                 if (is_numeric($key)) {
                     $key = array_shift($route);
                 }
                 if (is_array($route)) {
                     $route = $route[0];
                 }
                 $param = [];
                 if (is_array($route)) {
                     $route = implode('\\', $route);
                 } elseif ($route instanceof \Closure) {
                     continue;
                 } elseif (strpos($route, '?')) {
                     list($route, $str) = explode('?', $route, 2);
                     parse_str($str, $param);
                 }
                 $var = self::parseVar($rule . '/' . $key);
                 $alias[$route][] = [$rule . '/' . $key, $var, $param];
             }
         } else {
             $route = $val['route'];
             $param = [];
             if (is_array($route)) {
                 $route = implode('\\', $route);
             } elseif ($route instanceof \Closure) {
                 continue;
             } elseif (strpos($route, '?')) {
                 list($route, $str) = explode('?', $route, 2);
                 parse_str($str, $param);
             }
             $var = self::parseVar($rule);
             $alias[$route][] = [$rule, $var, $param];
         }
     }
     // 检测路由映射
     $maps = Route::map();
     foreach ($maps as $rule => $route) {
         $param = [];
         if (strpos($route, '?')) {
             list($route, $str) = explode('?', $route, 2);
             parse_str($str, $param);
         }
         $alias[$route][] = [$rule, [], $param];
     }
     !APP_DEBUG && Cache::set('think_route_alias', $alias);
     return $alias;
 }
Example #3
0
 protected static function checkRoute($url, $vars)
 {
     // 获取路由定义
     $rules = Route::getRules();
     // 全局变量规则
     $pattern = Route::pattern();
     foreach ($rules as $rule => $val) {
         if (!empty($val['routes'])) {
             // 匹配到路由分组
             foreach ($val['routes'] as $key => $route) {
                 if (is_numeric($key)) {
                     $key = array_shift($route);
                 }
                 $check = isset($route[2]) ? array_merge($pattern, $route[2]) : $pattern;
                 $route = $route[0];
                 $route = is_array($route) ? $route[0] : $route;
                 $result = $rule . Config::get('pathinfo_depr') . $key;
                 if ($route == $url && self::checkPattern($result, $vars, $check)) {
                     return $result;
                 }
             }
         } else {
             if (is_numeric($rule)) {
                 $rule = array_shift($val);
             }
             $route = $val['route'];
             $route = is_array($route) ? $route[0] : $route;
             $check = isset($val['pattern']) ? array_merge($pattern, $val['pattern']) : $pattern;
             if ($route == $url && self::checkPattern($rule, $vars, $check)) {
                 return $rule;
             }
         }
     }
     return false;
 }