修正路由类

This commit is contained in:
thinkphp
2015-12-12 07:58:58 +08:00
parent b40030abce
commit 28508f690a
2 changed files with 19 additions and 7 deletions

View File

@@ -91,20 +91,18 @@ class Error
* *
* @param mixed $error 错误 * @param mixed $error 错误
* @param int $code * @param int $code
*
* @internal param int $errno 错误代码
*/ */
public static function halt($error, $code = 1) public static function halt($error, $code = 1)
{ {
$message = is_array($error) ? $error['message'] : $error; $message = is_array($error) ? $error['message'] : $error;
$code = is_array($error) ? $error['code'] : $code; $code = is_array($error) ? $error['code'] : $code;
$e = ['mssage' => $message, 'code' => $code];
if (APP_DEBUG) { if (APP_DEBUG) {
//调试模式下输出错误信息 //调试模式下输出错误信息
if (!is_array($error)) { if (!is_array($error)) {
$trace = debug_backtrace(); $trace = debug_backtrace();
$e['message'] = $error; $e['message'] = $error;
$e['code'] = $code;
$e['file'] = $trace[0]['file']; $e['file'] = $trace[0]['file'];
$e['line'] = $trace[0]['line']; $e['line'] = $trace[0]['line'];
ob_start(); ob_start();
@@ -119,8 +117,11 @@ class Error
if (!empty($error_page)) { if (!empty($error_page)) {
header('Location: ' . $error_page); header('Location: ' . $error_page);
} else { } else {
$e['code'] = $code;
$e['message'] = Config::get('show_error_msg') ? $message : Config::get('error_message'); $e['message'] = Config::get('show_error_msg') ? $message : Config::get('error_message');
} }
} else {
$e = ['mssage' => $message, 'code' => $code];
} }
$type = Config::get('default_return_type'); $type = Config::get('default_return_type');

View File

@@ -530,12 +530,12 @@ class Route
// 外部地址中可以用动态变量 采用 :1 :2 的方式 // 外部地址中可以用动态变量 采用 :1 :2 的方式
// 'news/:month/:day/:id'=>['News/read?cate=1','status=1'], // 'news/:month/:day/:id'=>['News/read?cate=1','status=1'],
// 'new/:id'=>['/new.php?id=:1',301], 重定向 // 'new/:id'=>['/new.php?id=:1',301], 重定向
private static function parseRule($rule, $route, $url) private static function parseRule($rule, $route, $pathinfo)
{ {
// 获取URL地址中的参数
$paths = explode('/', $pathinfo);
// 获取路由地址规则 // 获取路由地址规则
$url = is_array($route) ? $route[0] : $route; $url = is_array($route) ? $route[0] : $route;
// 获取URL地址中的参数
$paths = explode('/', $url);
// 解析路由规则 // 解析路由规则
$matches = []; $matches = [];
$rule = explode('/', $rule); $rule = explode('/', $rule);
@@ -589,6 +589,10 @@ class Route
} }
} }
$var = array_merge($matches, $var); $var = array_merge($matches, $var);
// 解析剩余的URL参数
if (!empty($paths)) {
preg_replace_callback('/(\w+)\/([^\/]+)/', function ($match) use (&$var) {$var[strtolower($match[1])] = strip_tags($match[2]);}, implode('/', $paths));
}
// 解析路由自动传人参数 // 解析路由自动传人参数
if (is_array($route) && isset($route[1])) { if (is_array($route) && isset($route[1])) {
parse_str($route[1], $params); parse_str($route[1], $params);
@@ -607,7 +611,7 @@ class Route
// 参数值和外部地址中可以用动态变量 采用 :1 :2 的方式 // 参数值和外部地址中可以用动态变量 采用 :1 :2 的方式
// '/new\/(\d+)\/(\d+)/'=>['News/read?id=:1&page=:2&cate=1','status=1'], // '/new\/(\d+)\/(\d+)/'=>['News/read?id=:1&page=:2&cate=1','status=1'],
// '/new\/(\d+)/'=>['/new.php?id=:1&page=:2&status=1','301'], 重定向 // '/new\/(\d+)/'=>['/new.php?id=:1&page=:2&status=1','301'], 重定向
private static function parseRegex($matches, $route, $url) private static function parseRegex($matches, $route, $pathinfo)
{ {
// 获取路由地址规则 // 获取路由地址规则
$url = is_array($route) ? $route[0] : $route; $url = is_array($route) ? $route[0] : $route;
@@ -620,6 +624,13 @@ class Route
// 解析路由地址 // 解析路由地址
$result = self::parseRoute($url); $result = self::parseRoute($url);
$var = $result['var']; $var = $result['var'];
// 解析剩余的URL参数
$regx = substr_replace($pathinfo, '', 0, strlen($matches[0]));
if ($regx) {
preg_replace_callback('/(\w+)\/([^\/]+)/', function ($match) use (&$var) {
$var[strtolower($match[1])] = strip_tags($match[2]);
}, $regx);
}
// 解析路由自动传人参数 // 解析路由自动传人参数
if (is_array($route) && isset($route[1])) { if (is_array($route) && isset($route[1])) {
parse_str($route[1], $params); parse_str($route[1], $params);