From bbebe0a02ddcefc18cfbe3a7f5aa054c9a155950 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Fri, 25 Mar 2016 18:30:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9BRoute=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Route.php | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/library/think/Route.php b/library/think/Route.php index 10a96214..6fbf2f3f 100644 --- a/library/think/Route.php +++ b/library/think/Route.php @@ -602,21 +602,18 @@ class Route if (false !== strpos($val, '<') && preg_match_all('/<(\w+(\??))>/', $val, $matches)) { foreach ($matches[1] as $name) { if (strpos($name, '?')) { - // 可选 - $name = substr($name, 0, -1); - $val = str_replace('<' . $name . '?>', '((' . $pattern[$name] . ')?)', $val); + $name = substr($name, 0, -1); + $replace[] = '((' . (isset($pattern[$name]) ? $pattern[$name] : '') . ')?)'; } else { - $val = str_replace('<' . $name . '>', '(' . $pattern[$name] . ')', $val); + $replace[] = '(' . (isset($pattern[$name]) ? $pattern[$name] : '') . ')'; } + $value[] = $name; } + $val = str_replace($matches[0], $replace, $val); if (preg_match('/^' . $val . '$/', $m1[$key], $match)) { array_shift($match); - foreach ($matches[1] as $i => $name) { - if (strpos($name, '?')) { - $name = substr($name, 0, -1); - } - $var[$name] = $match[$i]; - } + $match = array_slice($match, 0, count($value)); + $var = array_merge($var, array_combine($value, $match)); continue; } else { return false; @@ -634,7 +631,7 @@ class Route // 检查变量规则 return false; } - $var[$name] = $m1[$key]; + $var[$name] = isset($m1[$key]) ? $m1[$key] : ''; } elseif (0 !== strcasecmp($val, $m1[$key])) { return false; }