分组路由添加 prefix参数 用于定义路由地址的前缀部分

This commit is contained in:
thinkphp
2016-07-26 15:30:08 +08:00
parent 14c85b5462
commit f765139ea5

View File

@@ -298,8 +298,10 @@ class Route
if ($routes instanceof \Closure) { if ($routes instanceof \Closure) {
$curentGroup = self::$group; $curentGroup = self::$group;
self::setGroup($name); self::setGroup($name);
self::setOption($option);
call_user_func_array($routes, []); call_user_func_array($routes, []);
self::$group = $curentGroup; self::$group = $curentGroup;
self::setOption([]);
if ($curentGroup) { if ($curentGroup) {
$name = $curentGroup . '/' . $name; $name = $curentGroup . '/' . $name;
} }
@@ -845,7 +847,7 @@ class Route
return self::bindToNamespace($url, self::$bind['namespace'], $depr); return self::bindToNamespace($url, self::$bind['namespace'], $depr);
case 'module': case 'module':
// 如果有模块/控制器绑定 针对路由到 模块/控制器 有效 // 如果有模块/控制器绑定 针对路由到 模块/控制器 有效
$url = rtrim(self::$bind['module'] . '/' . ltrim($url, '/'), '/'); $url = self::$bind['module'] . '/' . ltrim($url, '/');
break; break;
case 'group': case 'group':
// 绑定到路由分组 // 绑定到路由分组
@@ -1198,32 +1200,35 @@ class Route
$paths = explode('/', $pathinfo); $paths = explode('/', $pathinfo);
} }
// 获取路由地址规则 // 获取路由地址规则
$url = $route; if (is_string($route) && isset($option['prefix'])) {
// 路由地址前缀
$route = $option['prefix'] . $route;
}
// 替换路由地址中的变量 // 替换路由地址中的变量
if (is_string($url) && !empty($matches)) { if (is_string($route) && !empty($matches)) {
foreach ($matches as $key => $val) { foreach ($matches as $key => $val) {
if (false !== strpos($url, ':' . $key)) { if (false !== strpos($url, ':' . $key)) {
$url = str_replace(':' . $key, $val, $url); $route = str_replace(':' . $key, $val, $route);
unset($matches[$key]); unset($matches[$key]);
} }
} }
} }
if ($url instanceof \Closure) { if ($route instanceof \Closure) {
// 执行闭包 // 执行闭包
$result = ['type' => 'function', 'function' => $url, 'params' => $matches]; $result = ['type' => 'function', 'function' => $route, 'params' => $matches];
} elseif (0 === strpos($url, '/') || 0 === strpos($url, 'http')) { } elseif (0 === strpos($route, '/') || 0 === strpos($route, 'http')) {
// 路由到重定向地址 // 路由到重定向地址
$result = ['type' => 'redirect', 'url' => $url, 'status' => isset($option['status']) ? $option['status'] : 301]; $result = ['type' => 'redirect', 'url' => $route, 'status' => isset($option['status']) ? $option['status'] : 301];
} elseif (0 === strpos($url, '\\')) { } elseif (0 === strpos($route, '\\')) {
// 路由到方法 // 路由到方法
$method = strpos($url, '@') ? explode('@', $url) : $url; $method = strpos($route, '@') ? explode('@', $route) : $route;
$result = ['type' => 'method', 'method' => $method, 'params' => $matches]; $result = ['type' => 'method', 'method' => $method, 'params' => $matches];
} elseif (0 === strpos($url, '@')) { } elseif (0 === strpos($route, '@')) {
// 路由到控制器 // 路由到控制器
$result = ['type' => 'controller', 'controller' => substr($url, 1), 'params' => $matches]; $result = ['type' => 'controller', 'controller' => substr($route, 1), 'params' => $matches];
} else { } else {
// 路由到模块/控制器/操作 // 路由到模块/控制器/操作
$result = self::parseModule($url); $result = self::parseModule($route);
} }
// 解析额外参数 // 解析额外参数
self::parseUrlParams(empty($paths) ? '' : implode('/', $paths), $matches); self::parseUrlParams(empty($paths) ? '' : implode('/', $paths), $matches);