diff --git a/library/think/Url.php b/library/think/Url.php index bb0b8d5d..669f36f7 100644 --- a/library/think/Url.php +++ b/library/think/Url.php @@ -222,6 +222,12 @@ class Url } elseif (false !== strpos($url, ':' . $key)) { $url = str_replace(':' . $key, $val, $url); unset($vars[$key]); + } elseif (false !== strpos($url, '<' . $key . '>')) { + $url = str_replace('<' . $key . '>', $val, $url); + unset($vars[$key]); + } elseif (false !== strpos($url, '<' . $key . '?>')) { + $url = str_replace('<' . $key . '?>', $val, $url); + unset($vars[$key]); } } return $url; @@ -286,6 +292,18 @@ class Url $var = []; foreach (explode('/', $rule) as $val) { $optional = false; + if (false !== strpos($val, '<') && preg_match_all('/<(\w+(\??))>/', $val, $matches)) { + foreach ($matches[1] as $name) { + if (strpos($name, '?')) { + $name = substr($name, 0, -1); + $optional = true; + } else { + $optional = false; + } + $var[$name] = $optional ? 2 : 1; + } + } + if (0 === strpos($val, '[:')) { // 可选参数 $optional = true; @@ -294,8 +312,7 @@ class Url if (0 === strpos($val, ':')) { // URL变量 $name = substr($val, 1); - $type = $optional ? 2 : 1; - $var[$name] = $type; + $var[$name] = $optional ? 2 : 1; } } return $var;