From 37b329306adf9cf26df968f99cdd46df8518ae5c Mon Sep 17 00:00:00 2001 From: thinkphp Date: Mon, 22 Aug 2016 12:09:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9BRoute=E7=B1=BB=E7=9A=84parseR?= =?UTF-8?q?ule=E6=96=B9=E6=B3=95=20=E6=94=B9=E8=BF=9B=E5=AF=B9=E8=B7=AF?= =?UTF-8?q?=E7=94=B1after=E8=A1=8C=E4=B8=BA=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 | 51 ++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/library/think/Route.php b/library/think/Route.php index 44ef6d40..819c325e 100644 --- a/library/think/Route.php +++ b/library/think/Route.php @@ -1270,26 +1270,6 @@ class Route */ private static function parseRule($rule, $route, $pathinfo, $option = [], $matches = [], $merge = false) { - // 检测是否定义路由 - if (!empty($option['after_behavior'])) { - if ($option['after_behavior'] instanceof \Closure) { - $result = call_user_func_array($option['after_behavior'], [$route]); - } else { - foreach ((array) $option['after_behavior'] as $behavior) { - $result = Hook::exec($behavior, '', $route); - if (!is_null($result)) { - break; - } - } - } - // 路由规则重定向 - if ($result instanceof Response) { - return ['type' => 'response', 'response' => $result, 'params' => $matches]; - } elseif (is_array($result)) { - return $result; - } - } - // 解析路由规则 if ($rule) { $rule = explode('/', $rule); @@ -1311,6 +1291,7 @@ class Route } else { $paths = explode('/', $pathinfo); } + // 获取路由地址规则 if (is_string($route) && isset($option['prefix'])) { // 路由地址前缀 @@ -1325,6 +1306,32 @@ class Route } } } + + // 解析额外参数 + self::parseUrlParams(empty($paths) ? '' : implode('/', $paths), $matches); + // 记录匹配的路由信息 + Request::instance()->routeInfo(['rule' => $rule, 'route' => $route, 'option' => $option]); + + // 检测路由after行为 + if (!empty($option['after_behavior'])) { + if ($option['after_behavior'] instanceof \Closure) { + $result = call_user_func_array($option['after_behavior'], []); + } else { + foreach ((array) $option['after_behavior'] as $behavior) { + $result = Hook::exec($behavior, ''); + if (!is_null($result)) { + break; + } + } + } + // 路由规则重定向 + if ($result instanceof Response) { + return ['type' => 'response', 'response' => $result, 'params' => $matches]; + } elseif (is_array($result)) { + return $result; + } + } + if ($route instanceof \Closure) { // 执行闭包 $result = ['type' => 'function', 'function' => $route, 'params' => $matches]; @@ -1342,10 +1349,6 @@ class Route // 路由到模块/控制器/操作 $result = self::parseModule($route); } - // 解析额外参数 - self::parseUrlParams(empty($paths) ? '' : implode('/', $paths), $matches); - // 记录匹配的路由信息 - Request::instance()->routeInfo(['rule' => $rule, 'route' => $route, 'option' => $option]); return $result; }