改进Route类可选参数的完整匹配检测

This commit is contained in:
thinkphp
2016-06-23 17:49:38 +08:00
parent 38124ccd12
commit ebc862e5fb

View File

@@ -210,8 +210,8 @@ class Route
*/ */
public static function rule($rule, $route = '', $type = '*', $option = [], $pattern = [], $group = '') public static function rule($rule, $route = '', $type = '*', $option = [], $pattern = [], $group = '')
{ {
$group = $group ?: self::$group; $group = $group ?: self::$group;
$type = strtoupper($type); $type = strtoupper($type);
if (strpos($type, '|')) { if (strpos($type, '|')) {
foreach (explode('|', $type) as $val) { foreach (explode('|', $type) as $val) {
self::rule($rule, $route, $val, $option, $pattern, $group); self::rule($rule, $route, $val, $option, $pattern, $group);
@@ -522,7 +522,7 @@ class Route
/** /**
* 检测子域名部署 * 检测子域名部署
* @access public * @access public
* @param Request $request Request请求对象 * @param Request $request Request请求对象
* @return void * @return void
*/ */
public static function checkDomain($request) public static function checkDomain($request)
@@ -910,7 +910,7 @@ class Route
if ($len1 >= $len2 || strpos($rule, '[')) { if ($len1 >= $len2 || strpos($rule, '[')) {
if ('$' == substr($rule, -1, 1)) { if ('$' == substr($rule, -1, 1)) {
// 完整匹配 // 完整匹配
if (!$merge && $len1 != $len2 && false === strpos($rule, '[')) { if (!$merge && $len1 != $len2 && (false === strpos($rule, '[') || $len1 > $len2 || $len1 < $len2 - substr_count($rule, '['))) {
return false; return false;
} else { } else {
$rule = substr($rule, 0, -1); $rule = substr($rule, 0, -1);
@@ -924,12 +924,12 @@ class Route
if ($option['after_behavior'] instanceof \Closure) { if ($option['after_behavior'] instanceof \Closure) {
$result = call_user_func_array($option['after_behavior'], [$route]); $result = call_user_func_array($option['after_behavior'], [$route]);
} else { } else {
foreach((array)$option['after_behavior'] as $behavior){ foreach ((array) $option['after_behavior'] as $behavior) {
$result = Hook::exec($behavior, '', $route); $result = Hook::exec($behavior, '', $route);
if (!is_null($result)) { if (!is_null($result)) {
break; break;
} }
} }
} }
// 路由规则重定向 // 路由规则重定向
if ($result instanceof Response) { if ($result instanceof Response) {