mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 23:22:48 +08:00
改进Url生成 添加清空别名缓存方法 别名缓存内容加上变量信息
This commit is contained in:
@@ -62,13 +62,13 @@ class Url
|
|||||||
// URL后缀
|
// URL后缀
|
||||||
$suffix = self::parseSuffix($suffix);
|
$suffix = self::parseSuffix($suffix);
|
||||||
// 参数组装
|
// 参数组装
|
||||||
if (!empty($params)) {
|
if (!empty($vars)) {
|
||||||
// 添加参数
|
// 添加参数
|
||||||
if (Config::get('url_common_param')) {
|
if (Config::get('url_common_param')) {
|
||||||
$vars = urldecode(http_build_query($vars));
|
$vars = urldecode(http_build_query($vars));
|
||||||
$url .= $suffix . '?' . $vars;
|
$url .= $suffix . '?' . $vars;
|
||||||
} else {
|
} else {
|
||||||
foreach ($params as $var => $val) {
|
foreach ($vars as $var => $val) {
|
||||||
if ('' !== trim($val)) {
|
if ('' !== trim($val)) {
|
||||||
$url .= $depr . $var . $depr . urlencode($val);
|
$url .= $depr . $var . $depr . urlencode($val);
|
||||||
}
|
}
|
||||||
@@ -139,31 +139,13 @@ class Url
|
|||||||
return $domain;
|
return $domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检测变量规则
|
// 检测路由规则中的变量是否有传入
|
||||||
protected static function pattern($rule, $vars, $pattern)
|
protected static function pattern($pattern, $vars)
|
||||||
{
|
{
|
||||||
// 检测路由规则中的变量
|
foreach ($pattern as $key => $type) {
|
||||||
// 检测是否设置了参数分隔符
|
if (1 == $type && !isset($vars[$key])) {
|
||||||
if ($depr = Config::get('url_params_depr')) {
|
// 变量未设置
|
||||||
$rule = str_replace($depr, '/', $rule);
|
return false;
|
||||||
}
|
|
||||||
// 提取路由规则中的变量
|
|
||||||
$var = [];
|
|
||||||
$array = explode('/', $rule);
|
|
||||||
foreach ($array as $val) {
|
|
||||||
$optional = false;
|
|
||||||
if (0 === strpos($val, '[:')) {
|
|
||||||
// 可选参数
|
|
||||||
$val = substr($val, 1, -1);
|
|
||||||
$optional = true;
|
|
||||||
}
|
|
||||||
if (0 === strpos($val, ':')) {
|
|
||||||
// URL变量
|
|
||||||
$name = substr($val, 1);
|
|
||||||
if (!$optional && !isset($vars[$name])) {
|
|
||||||
// 变量未设置
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -200,12 +182,13 @@ class Url
|
|||||||
{
|
{
|
||||||
$alias = self::getRouteAlias();
|
$alias = self::getRouteAlias();
|
||||||
if (!empty($alias[$name])) {
|
if (!empty($alias[$name])) {
|
||||||
foreach ($alias[$name] as $key => $url) {
|
foreach ($alias[$name] as $key => $val) {
|
||||||
|
list($url, $pattern) = $val;
|
||||||
// 检查变量匹配
|
// 检查变量匹配
|
||||||
if (strpos($url, '$')) {
|
if (strpos($url, '$')) {
|
||||||
$url = str_replace('$', '[--think--]', $url);
|
$url = str_replace('$', '[--think--]', $url);
|
||||||
}
|
}
|
||||||
if (self::pattern($url, $vars, $check)) {
|
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);
|
||||||
@@ -241,14 +224,16 @@ class Url
|
|||||||
if (strpos($route, '?')) {
|
if (strpos($route, '?')) {
|
||||||
$route = strstr($route, '?', true);
|
$route = strstr($route, '?', true);
|
||||||
}
|
}
|
||||||
$alias[$route][] = $rule . '/' . $key;
|
$var = self::parseVar($rule . '/' . $key);
|
||||||
|
$alias[$route][] = [$rule . '/' . $key, $var];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$route = $val['route'];
|
$route = $val['route'];
|
||||||
if (strpos($route, '?')) {
|
if (strpos($route, '?')) {
|
||||||
$route = strstr($route, '?', true);
|
$route = strstr($route, '?', true);
|
||||||
}
|
}
|
||||||
$alias[$route][] = $rule;
|
$var = self::parseVar($rule);
|
||||||
|
$alias[$route][] = [$rule, $var];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Cache::set('think_route_alias', $alias);
|
Cache::set('think_route_alias', $alias);
|
||||||
@@ -256,4 +241,36 @@ class Url
|
|||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 分析路由规则中的变量
|
||||||
|
private static function parseVar($rule)
|
||||||
|
{
|
||||||
|
// 检测是否设置了参数分隔符
|
||||||
|
if ($depr = Config::get('url_params_depr')) {
|
||||||
|
$rule = str_replace($depr, '/', $rule);
|
||||||
|
}
|
||||||
|
// 提取路由规则中的变量
|
||||||
|
$var = [];
|
||||||
|
foreach (explode('/', $rule) as $val) {
|
||||||
|
$optional = false;
|
||||||
|
if (0 === strpos($val, '[:')) {
|
||||||
|
// 可选参数
|
||||||
|
$optional = true;
|
||||||
|
$val = substr($val, 1, -1);
|
||||||
|
}
|
||||||
|
if (0 === strpos($val, ':')) {
|
||||||
|
// URL变量
|
||||||
|
$name = substr($val, 1);
|
||||||
|
$type = $optional ? 2 : 1;
|
||||||
|
$var[$name] = $type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $var;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空路由别名缓存
|
||||||
|
public static function clearAliasCache()
|
||||||
|
{
|
||||||
|
Cache::rm('think_route_alias');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user