From 4824c43e903e10460e34ad909e5f236102372036 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Thu, 9 Feb 2017 11:39:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9BURl=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=AF=B9ext=E5=8F=82=E6=95=B0=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Route.php | 8 +++++--- library/think/Url.php | 11 +++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/library/think/Route.php b/library/think/Route.php index 4a630adc..679a1372 100644 --- a/library/think/Route.php +++ b/library/think/Route.php @@ -304,8 +304,9 @@ class Route } $vars = self::parseVar($rule); if (isset($name)) { - $key = $group ? $group . ($rule ? '/' . $rule : '') : $rule; - self::name($name, [$key, $vars, self::$domain]); + $key = $group ? $group . ($rule ? '/' . $rule : '') : $rule; + $suffix = isset($option['ext']) ? $option['ext'] : null; + self::name($name, [$key, $vars, self::$domain, $suffix]); } if ($group) { if ('*' != $type) { @@ -447,7 +448,8 @@ class Route $vars = self::parseVar($key); $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]; } diff --git a/library/think/Url.php b/library/think/Url.php index d7dfd973..520e664a 100644 --- a/library/think/Url.php +++ b/library/think/Url.php @@ -80,6 +80,9 @@ class Url if (!empty($match[1])) { $domain = $match[1]; } + if (!empty($match[2])) { + $suffix = $match[2]; + } } elseif (!empty($rule) && isset($name)) { throw new \InvalidArgumentException('route name not exists:' . $name); } else { @@ -288,18 +291,18 @@ class Url public static function getRuleUrl($rule, &$vars = []) { foreach ($rule as $item) { - list($url, $pattern, $domain) = $item; + list($url, $pattern, $domain, $suffix) = $item; if (empty($pattern)) { - return [$url, $domain]; + return [$url, $domain, $suffix]; } foreach ($pattern as $key => $val) { if (isset($vars[$key])) { $url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key . '', '<' . $key . '>'], $vars[$key], $url); unset($vars[$key]); - $result = [$url, $domain]; + $result = [$url, $domain, $suffix]; } elseif (2 == $val) { $url = str_replace(['/[:' . $key . ']', '[:' . $key . ']', '<' . $key . '?>'], '', $url); - $result = [$url, $domain]; + $result = [$url, $domain, $suffix]; } else { break; }