改进Url类支持混合变量路由规则定义

This commit is contained in:
thinkphp
2016-03-25 22:42:02 +08:00
parent 5398a989bd
commit 004b87a47b

View File

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