From d65daa2fdc4a8df6ba1fd11003776f9610cfee00 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Thu, 13 Oct 2016 23:17:19 +0800 Subject: [PATCH 1/3] =?UTF-8?q?URL=E7=94=9F=E6=88=90=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=88=AB=E5=90=8D=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Url.php | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/library/think/Url.php b/library/think/Url.php index 77d9f32b..850e5ff5 100644 --- a/library/think/Url.php +++ b/library/think/Url.php @@ -85,13 +85,29 @@ class Url } elseif (!empty($rule) && isset($name)) { throw new \InvalidArgumentException('route name not exists:' . $name); } else { + // 检查别名路由 + $alias = Route::rules('alias'); + if ($alias) { + // 别名路由解析 + foreach ($alias as $key => $val) { + if (is_array($val)) { + $val = $val[0]; + } + if (0 === strpos($url, $val)) { + $url = $key . substr($url, strlen($val)); + break; + } + } + } else { + // 路由标识不存在 直接解析 + $url = self::parseUrl($url, $domain); + } if (isset($info['query'])) { // 解析地址里面参数 合并到vars parse_str($info['query'], $params); $vars = array_merge($params, $vars); } - // 路由标识不存在 直接解析 - $url = self::parseUrl($url, $domain); + } // 检测URL绑定 From 4c285d94d91ab05e8259c8fb7943d5b0dfbcc2ab Mon Sep 17 00:00:00 2001 From: thinkphp Date: Thu, 13 Oct 2016 23:28:53 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=94=B9=E8=BF=9BUrl=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Url.php | 10 +--------- tests/thinkphp/library/think/urlTest.php | 13 ++++++++++++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/library/think/Url.php b/library/think/Url.php index 850e5ff5..77c15a2f 100644 --- a/library/think/Url.php +++ b/library/think/Url.php @@ -35,11 +35,6 @@ class Url $domain = true; } // 解析URL - if (0 === strpos($url, '[') && $pos = strpos($url, ']')) { - // [name] 表示使用路由命名标识生成URL - $name = substr($url, 1, $pos - 1); - $url = 'name' . substr($url, $pos + 1); - } $info = parse_url($url); $url = !empty($info['path']) ? $info['path'] : ''; if (isset($info['fragment'])) { @@ -65,7 +60,7 @@ class Url } if ($url) { - $rule = Route::name(isset($name) ? $name : $url . (isset($info['query']) ? '?' . $info['query'] : '')); + $rule = Route::name($url . (isset($info['query']) ? '?' . $info['query'] : '')); if (is_null($rule) && isset($info['query'])) { $rule = Route::name($url); // 解析地址里面参数 合并到vars @@ -82,8 +77,6 @@ class Url if (!empty($match[1])) { $domain = $match[1]; } - } elseif (!empty($rule) && isset($name)) { - throw new \InvalidArgumentException('route name not exists:' . $name); } else { // 检查别名路由 $alias = Route::rules('alias'); @@ -107,7 +100,6 @@ class Url parse_str($info['query'], $params); $vars = array_merge($params, $vars); } - } // 检测URL绑定 diff --git a/tests/thinkphp/library/think/urlTest.php b/tests/thinkphp/library/think/urlTest.php index 94dfc71d..ef49b89f 100644 --- a/tests/thinkphp/library/think/urlTest.php +++ b/tests/thinkphp/library/think/urlTest.php @@ -25,7 +25,18 @@ class urlTest extends \PHPUnit_Framework_TestCase public function setUp() { - Route::rules([]); + Route::rules(['GET' => [], + 'POST' => [], + 'PUT' => [], + 'DELETE' => [], + 'PATCH' => [], + 'HEAD' => [], + 'OPTIONS' => [], + '*' => [], + 'alias' => [], + 'domain' => [], + 'pattern' => [], + 'name' => []]); Route::name([]); } From b9b7e34b6d8c13e6a6286ad505ad70accf9c09e4 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Thu, 13 Oct 2016 23:34:34 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Url.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/library/think/Url.php b/library/think/Url.php index 77c15a2f..79e3c1cb 100644 --- a/library/think/Url.php +++ b/library/think/Url.php @@ -35,6 +35,11 @@ class Url $domain = true; } // 解析URL + if (0 === strpos($url, '[') && $pos = strpos($url, ']')) { + // [name] 表示使用路由命名标识生成URL + $name = substr($url, 1, $pos - 1); + $url = 'name' . substr($url, $pos + 1); + } $info = parse_url($url); $url = !empty($info['path']) ? $info['path'] : ''; if (isset($info['fragment'])) { @@ -60,7 +65,7 @@ class Url } if ($url) { - $rule = Route::name($url . (isset($info['query']) ? '?' . $info['query'] : '')); + $rule = Route::name(isset($name) ? $name : $url . (isset($info['query']) ? '?' . $info['query'] : '')); if (is_null($rule) && isset($info['query'])) { $rule = Route::name($url); // 解析地址里面参数 合并到vars @@ -77,6 +82,8 @@ class Url if (!empty($match[1])) { $domain = $match[1]; } + } elseif (!empty($rule) && isset($name)) { + throw new \InvalidArgumentException('route name not exists:' . $name); } else { // 检查别名路由 $alias = Route::rules('alias');