mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 23:22:48 +08:00
优化代码
This commit is contained in:
@@ -38,8 +38,10 @@ class Url
|
|||||||
$vars = array_merge($params, $vars);
|
$vars = array_merge($params, $vars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取路由别名
|
||||||
|
$alias = self::getRouteAlias();
|
||||||
// 检测路由
|
// 检测路由
|
||||||
if ($match = self::getRouteUrl($url, $vars)) {
|
if (isset($alias[$url]) && $match = self::getRouteUrl($alias[$url], $vars)) {
|
||||||
// 处理路由规则中的特殊字符
|
// 处理路由规则中的特殊字符
|
||||||
$url = str_replace('[--think--]', '', $match);
|
$url = str_replace('[--think--]', '', $match);
|
||||||
} else {
|
} else {
|
||||||
@@ -178,34 +180,32 @@ class Url
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 匹配路由地址
|
// 匹配路由地址
|
||||||
public static function getRouteUrl($name, &$vars = [])
|
public static function getRouteUrl($alias, &$vars = [])
|
||||||
{
|
{
|
||||||
$alias = self::getRouteAlias();
|
foreach ($alias as $key => $val) {
|
||||||
if (!empty($alias[$name])) {
|
list($url, $pattern) = $val;
|
||||||
foreach ($alias[$name] as $key => $val) {
|
// 解析安全替换
|
||||||
list($url, $pattern) = $val;
|
if (strpos($url, '$')) {
|
||||||
// 检查变量匹配
|
$url = str_replace('$', '[--think--]', $url);
|
||||||
if (strpos($url, '$')) {
|
}
|
||||||
$url = str_replace('$', '[--think--]', $url);
|
// 检查变量匹配
|
||||||
}
|
if (self::pattern($pattern, $vars)) {
|
||||||
if (self::pattern($pattern, $vars)) {
|
foreach ($vars as $key => $val) {
|
||||||
foreach ($vars as $key => $val) {
|
if (false !== strpos($url, '[:' . $key . ']')) {
|
||||||
if (false !== strpos($url, '[:' . $key . ']')) {
|
$url = str_replace('[:' . $key . ']', $val, $url);
|
||||||
$url = str_replace('[:' . $key . ']', $val, $url);
|
unset($vars[$key]);
|
||||||
unset($vars[$key]);
|
} elseif (false !== strpos($url, ':' . $key)) {
|
||||||
} elseif (false !== strpos($url, ':' . $key)) {
|
$url = str_replace(':' . $key, $val, $url);
|
||||||
$url = str_replace(':' . $key, $val, $url);
|
unset($vars[$key]);
|
||||||
unset($vars[$key]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return $url;
|
|
||||||
}
|
}
|
||||||
|
return $url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 自动生成路由别名
|
// 生成路由别名并缓存
|
||||||
private static function getRouteAlias()
|
private static function getRouteAlias()
|
||||||
{
|
{
|
||||||
if ($alias = Cache::get('think_route_alias')) {
|
if ($alias = Cache::get('think_route_alias')) {
|
||||||
@@ -213,33 +213,33 @@ class Url
|
|||||||
}
|
}
|
||||||
// 获取路由定义
|
// 获取路由定义
|
||||||
$rules = Route::getRules();
|
$rules = Route::getRules();
|
||||||
if ($rules) {
|
if (empty($rules)) {
|
||||||
foreach ($rules as $rule => $val) {
|
return [];
|
||||||
if (!empty($val['routes'])) {
|
}
|
||||||
foreach ($val['routes'] as $key => $route) {
|
foreach ($rules as $rule => $val) {
|
||||||
if (is_numeric($key)) {
|
if (!empty($val['routes'])) {
|
||||||
$key = array_shift($route);
|
foreach ($val['routes'] as $key => $route) {
|
||||||
}
|
if (is_numeric($key)) {
|
||||||
$route = $route[0];
|
$key = array_shift($route);
|
||||||
if (strpos($route, '?')) {
|
|
||||||
$route = strstr($route, '?', true);
|
|
||||||
}
|
|
||||||
$var = self::parseVar($rule . '/' . $key);
|
|
||||||
$alias[$route][] = [$rule . '/' . $key, $var];
|
|
||||||
}
|
}
|
||||||
} else {
|
$route = $route[0];
|
||||||
$route = $val['route'];
|
|
||||||
if (strpos($route, '?')) {
|
if (strpos($route, '?')) {
|
||||||
$route = strstr($route, '?', true);
|
$route = strstr($route, '?', true);
|
||||||
}
|
}
|
||||||
$var = self::parseVar($rule);
|
$var = self::parseVar($rule . '/' . $key);
|
||||||
$alias[$route][] = [$rule, $var];
|
$alias[$route][] = [$rule . '/' . $key, $var];
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$route = $val['route'];
|
||||||
|
if (strpos($route, '?')) {
|
||||||
|
$route = strstr($route, '?', true);
|
||||||
|
}
|
||||||
|
$var = self::parseVar($rule);
|
||||||
|
$alias[$route][] = [$rule, $var];
|
||||||
}
|
}
|
||||||
Cache::set('think_route_alias', $alias);
|
|
||||||
return $alias;
|
|
||||||
}
|
}
|
||||||
return [];
|
Cache::set('think_route_alias', $alias);
|
||||||
|
return $alias;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 分析路由规则中的变量
|
// 分析路由规则中的变量
|
||||||
|
|||||||
Reference in New Issue
Block a user