改进路由闭包的支持

This commit is contained in:
thinkphp
2015-12-01 23:11:33 +08:00
parent 5f1fe79e17
commit 2694a640ff
5 changed files with 31 additions and 38 deletions

View File

@@ -2,7 +2,7 @@
return [ return [
// 应用模式状态 // 应用模式状态
'app_status' => 'debug', 'app_status' => '',
// PATHINFO变量名 用于兼容模式 // PATHINFO变量名 用于兼容模式
'var_pathinfo' => 's', 'var_pathinfo' => 's',
// 兼容PATH_INFO获取 // 兼容PATH_INFO获取

View File

@@ -109,11 +109,9 @@ class App
// 操作方法执行完成监听 // 操作方法执行完成监听
Hook::listen('action_end', $data); Hook::listen('action_end', $data);
// 返回数据 // 返回数据
$data = Response::returnData($data, $config['default_return_type']); Response::returnData($data, $config['default_return_type']);
if ($config['response_exit']) { if ($config['response_exit']) {
exit($data); exit;
} else {
echo $data;
} }
} else { } else {
// 操作方法不是Public 抛出异常 // 操作方法不是Public 抛出异常
@@ -128,7 +126,6 @@ class App
throw new Exception('[ ' . (new \ReflectionClass($instance))->getName() . ':' . $action . ' ] not exists ', 404); throw new Exception('[ ' . (new \ReflectionClass($instance))->getName() . ':' . $action . ' ] not exists ', 404);
} }
} }
return;
} }
// 操作绑定到类:模块\controller\控制器\操作类 // 操作绑定到类:模块\controller\控制器\操作类
@@ -152,6 +149,7 @@ class App
return $class; return $class;
} }
// 获取操作方法的参数绑定
private static function getBindParams($method, $paramsBindType) private static function getBindParams($method, $paramsBindType)
{ {
switch ($_SERVER['REQUEST_METHOD']) { switch ($_SERVER['REQUEST_METHOD']) {
@@ -179,41 +177,39 @@ class App
} }
return $args; return $args;
} }
/**
* 初始化模块 // 初始化模块
* @access private
* @return void
*/
private static function initModule($module, &$config) private static function initModule($module, &$config)
{ {
// 加载初始化文件 // 定位模块目录
if (is_file(APP_PATH . $module . '/init' . EXT)) { $module = COMMON_MODULE == $module ? '' : $module . '/';
include APP_PATH . $module . '/init' . EXT;
} else {
// 定位模块目录 // 加载初始化文件
$module = COMMON_MODULE == $module ? '' : $module . '/'; if (is_file(APP_PATH . $module . 'init' . EXT)) {
include APP_PATH . $module . 'init' . EXT;
} else {
$path = APP_PATH . $module;
// 加载模块配置 // 加载模块配置
$config = Config::load($module . 'config'); $config = Config::load($module . 'config');
// 加载应用状态配置 // 加载应用状态配置
if ($config['app_status'] && is_file(APP_PATH . $module . $config['app_status'] . EXT)) { if ($config['app_status']) {
$config = Config::load($module . $config['app_status']); $config = Config::load($module . $config['app_status']);
} }
// 加载别名文件 // 加载别名文件
if (is_file(APP_PATH . $module . 'alias' . EXT)) { if (is_file($path . 'alias' . EXT)) {
Loader::addMap(include APP_PATH . $module . 'alias' . EXT); Loader::addMap(include $path . 'alias' . EXT);
} }
// 加载行为扩展文件 // 加载行为扩展文件
if (is_file(APP_PATH . $module . 'tags' . EXT)) { if (is_file($path . 'tags' . EXT)) {
Hook::import(include APP_PATH . $module . 'tags' . EXT); Hook::import(include $path . 'tags' . EXT);
} }
// 加载公共文件 // 加载公共文件
if (is_file(APP_PATH . $module . 'common' . EXT)) { if (is_file($path . 'common' . EXT)) {
include APP_PATH . $module . 'common' . EXT; include $path . 'common' . EXT;
} }
} }
} }
@@ -236,7 +232,7 @@ class App
// 检测域名部署 // 检测域名部署
if (!IS_CLI && !empty($config['domain_deploy'])) { if (!IS_CLI && !empty($config['domain_deploy'])) {
Route::checkDomain(); Route::checkDomain($config['domain_rules']);
} }
// 监听path_info // 监听path_info

View File

@@ -37,7 +37,7 @@ class Config
// 加载配置文件 // 加载配置文件
public static function load($file, $name = '', $range = '') public static function load($file, $name = '', $range = '')
{ {
$file = is_file($file) ? $file : APP_PATH . $file . EXT; $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
return is_file($file) ? self::set(include $file, $name, $range) : self::$config[$range]; return is_file($file) ? self::set(include $file, $name, $range) : self::$config[$range];
} }

View File

@@ -55,7 +55,7 @@ class Response
$data = $handler . '(' . Transform::jsonEncode($data) . ');'; $data = $handler . '(' . Transform::jsonEncode($data) . ');';
break; break;
} }
return $data; echo $data;
} }
/** /**

View File

@@ -111,11 +111,11 @@ class Route
} }
// 检测子域名部署 // 检测子域名部署
public static function checkDomain() public static function checkDomain($rules = '')
{ {
$rules = $rules ?: self::$domain;
// 开启子域名部署 支持二级和三级域名 // 开启子域名部署 支持二级和三级域名
if (!empty(self::$domain)) { if (!empty($rules)) {
$rules = self::$domain;
if (isset($rules[$_SERVER['HTTP_HOST']])) { if (isset($rules[$_SERVER['HTTP_HOST']])) {
// 完整域名或者IP配置 // 完整域名或者IP配置
$rule = $rules[$_SERVER['HTTP_HOST']]; $rule = $rules[$_SERVER['HTTP_HOST']];
@@ -339,7 +339,7 @@ class Route
$args[] = $param->getDefaultValue(); $args[] = $param->getDefaultValue();
} }
} }
$reflect->invokeArgs($args); return $reflect->invokeArgs($args);
} }
// 执行规则匹配下的闭包方法 支持参数调用 // 执行规则匹配下的闭包方法 支持参数调用
@@ -356,7 +356,7 @@ class Route
$args[] = $param->getDefaultValue(); $args[] = $param->getDefaultValue();
} }
} }
$reflect->invokeArgs($args); return $reflect->invokeArgs($args);
} }
// 解析模块的URL地址 [模块/]控制器/操作 // 解析模块的URL地址 [模块/]控制器/操作
@@ -365,13 +365,10 @@ class Route
if ('/' == $url) { if ('/' == $url) {
return [null, null, null]; return [null, null, null];
} }
$paths = explode('/', $url); $paths = explode('/', $url);
$module = defined('BIND_MODULE') ? BIND_MODULE : array_shift($paths);
$module = defined('BIND_MODULE') ? BIND_MODULE : array_shift($paths);
$controller = defined('BIND_CONTROLLER') ? BIND_CONTROLLER : array_shift($paths); $controller = defined('BIND_CONTROLLER') ? BIND_CONTROLLER : array_shift($paths);
$action = $paths ? array_shift($paths) : null;
$action = $paths ? array_shift($paths) : null;
// 解析剩余的URL参数 // 解析剩余的URL参数
$var = []; $var = [];