域名绑定改进 支持绑定到路由分组

This commit is contained in:
thinkphp
2016-01-05 15:59:31 +08:00
parent 95462c1cc0
commit fa3a084dd6
2 changed files with 18 additions and 15 deletions

View File

@@ -406,11 +406,7 @@ class App
$_SERVER['PATH_INFO'] = preg_replace($config['url_html_suffix'] ? '/\.(' . trim($config['url_html_suffix'], '.') . ')$/i' : '/\.' . __EXT__ . '$/i', '', __INFO__); $_SERVER['PATH_INFO'] = preg_replace($config['url_html_suffix'] ? '/\.(' . trim($config['url_html_suffix'], '.') . ')$/i' : '/\.' . __EXT__ . '$/i', '', __INFO__);
$depr = $config['pathinfo_depr']; $depr = $config['pathinfo_depr'];
// 还原劫持后真实pathinfo // 还原劫持后真实pathinfo
$path_info = $path_info = $_SERVER['PATH_INFO'];
(defined('BIND_MODULE') ? BIND_MODULE . $depr : '') .
(defined('BIND_CONTROLLER') ? BIND_CONTROLLER . $depr : '') .
(defined('BIND_ACTION') ? BIND_ACTION . $depr : '') .
$_SERVER['PATH_INFO'];
// 路由检测 // 路由检测
if (!empty($config['url_route_on'])) { if (!empty($config['url_route_on'])) {

View File

@@ -79,7 +79,7 @@ class Route
} else { } else {
if (is_array($rule)) { if (is_array($rule)) {
// 检查域名部署 // 检查域名部署
if (isset($rule['[__domain__'])) { if (isset($rule['__domain__'])) {
self::domain($rule['__domain__']); self::domain($rule['__domain__']);
unset($rule['__domain__']); unset($rule['__domain__']);
} }
@@ -222,14 +222,14 @@ class Route
$result = $rule; $result = $rule;
} }
if (0 === strpos($result, '\\')) { if (0 === strpos($result, '\\')) {
// 绑定到行为 // 绑定到
self::$bind = []; self::$bind = ['class' => $result];
} elseif (0 === strpos($result, '@')) { } elseif (0 === strpos($result, '[')) {
// 绑定到控制器 // 绑定到分组
self::$bind = []; self::$bind = ['group' => substr($result, 1, -1)];
} else { } else {
// 绑定到模块/控制器 // 绑定到模块/控制器
self::$bind = explode('/', $result); self::$bind = ['module' => explode('/', $result)];
} }
} }
} }
@@ -241,13 +241,15 @@ class Route
// 检测域名部署 // 检测域名部署
self::checkDomain(); self::checkDomain();
if (!empty(self::$bind)) {
$url = implode('/', self::$bind) . '/' . $url;
}
// 优先检测是否存在PATH_INFO // 优先检测是否存在PATH_INFO
if (empty($url)) { if (empty($url)) {
$url = '/'; $url = '/';
} }
if (isset(self::$bind['module'])) {
$url = implode('/', self::$bind['module']) . '/' . $url;
}
// 分隔符替换 确保路由定义使用统一的分隔符 // 分隔符替换 确保路由定义使用统一的分隔符
if ('/' != $depr) { if ('/' != $depr) {
$url = str_replace($depr, '/', $url); $url = str_replace($depr, '/', $url);
@@ -265,8 +267,13 @@ class Route
// 合并任意请求的路由规则 // 合并任意请求的路由规则
$rules = array_merge(self::$rules['*'], $rules); $rules = array_merge(self::$rules['*'], $rules);
} }
// 路由规则检测 // 路由规则检测
if (!empty($rules)) { if (!empty($rules)) {
if (isset(self::$bind['group'])) {
// 绑定到分组
$rules = $rules[self::$bind['group']];
}
foreach ($rules as $rule => $val) { foreach ($rules as $rule => $val) {
$option = $val['option']; $option = $val['option'];
$pattern = $val['pattern']; $pattern = $val['pattern'];