改进URl生成对ext参数的支持

This commit is contained in:
thinkphp
2017-02-09 11:39:56 +08:00
parent 1cdb0ba693
commit 4824c43e90
2 changed files with 12 additions and 7 deletions

View File

@@ -304,8 +304,9 @@ class Route
} }
$vars = self::parseVar($rule); $vars = self::parseVar($rule);
if (isset($name)) { if (isset($name)) {
$key = $group ? $group . ($rule ? '/' . $rule : '') : $rule; $key = $group ? $group . ($rule ? '/' . $rule : '') : $rule;
self::name($name, [$key, $vars, self::$domain]); $suffix = isset($option['ext']) ? $option['ext'] : null;
self::name($name, [$key, $vars, self::$domain, $suffix]);
} }
if ($group) { if ($group) {
if ('*' != $type) { if ('*' != $type) {
@@ -447,7 +448,8 @@ class Route
$vars = self::parseVar($key); $vars = self::parseVar($key);
$item[] = ['rule' => $key, 'route' => $route, 'var' => $vars, 'option' => $options, 'pattern' => $patterns]; $item[] = ['rule' => $key, 'route' => $route, 'var' => $vars, 'option' => $options, 'pattern' => $patterns];
// 设置路由标识 // 设置路由标识
self::name($route, [$name . ($key ? '/' . $key : ''), $vars, self::$domain]); $suffix = isset($options['ext']) ? $options['ext'] : null;
self::name($route, [$name . ($key ? '/' . $key : ''), $vars, self::$domain, $suffix]);
} }
self::$rules['*'][$name] = ['rule' => $item, 'route' => '', 'var' => [], 'option' => $option, 'pattern' => $pattern]; self::$rules['*'][$name] = ['rule' => $item, 'route' => '', 'var' => [], 'option' => $option, 'pattern' => $pattern];
} }

View File

@@ -80,6 +80,9 @@ class Url
if (!empty($match[1])) { if (!empty($match[1])) {
$domain = $match[1]; $domain = $match[1];
} }
if (!empty($match[2])) {
$suffix = $match[2];
}
} elseif (!empty($rule) && isset($name)) { } elseif (!empty($rule) && isset($name)) {
throw new \InvalidArgumentException('route name not exists:' . $name); throw new \InvalidArgumentException('route name not exists:' . $name);
} else { } else {
@@ -288,18 +291,18 @@ class Url
public static function getRuleUrl($rule, &$vars = []) public static function getRuleUrl($rule, &$vars = [])
{ {
foreach ($rule as $item) { foreach ($rule as $item) {
list($url, $pattern, $domain) = $item; list($url, $pattern, $domain, $suffix) = $item;
if (empty($pattern)) { if (empty($pattern)) {
return [$url, $domain]; return [$url, $domain, $suffix];
} }
foreach ($pattern as $key => $val) { foreach ($pattern as $key => $val) {
if (isset($vars[$key])) { if (isset($vars[$key])) {
$url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key . '', '<' . $key . '>'], $vars[$key], $url); $url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key . '', '<' . $key . '>'], $vars[$key], $url);
unset($vars[$key]); unset($vars[$key]);
$result = [$url, $domain]; $result = [$url, $domain, $suffix];
} elseif (2 == $val) { } elseif (2 == $val) {
$url = str_replace(['/[:' . $key . ']', '[:' . $key . ']', '<' . $key . '?>'], '', $url); $url = str_replace(['/[:' . $key . ']', '[:' . $key . ']', '<' . $key . '?>'], '', $url);
$result = [$url, $domain]; $result = [$url, $domain, $suffix];
} else { } else {
break; break;
} }