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; }
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; }
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; }