修正路由混合变量中存在可选变量的BUG

This commit is contained in:
thinkphp
2016-09-25 11:34:54 +08:00
parent 10db21a084
commit e0491932b5

View File

@@ -1236,17 +1236,20 @@ class Route
foreach ($matches[1] as $name) { foreach ($matches[1] as $name) {
if (strpos($name, '?')) { if (strpos($name, '?')) {
$name = substr($name, 0, -1); $name = substr($name, 0, -1);
$replace[] = '(' . (isset($pattern[$name]) ? $pattern[$name] : '\w+') . '?)'; $replace[] = '(' . (isset($pattern[$name]) ? $pattern[$name] : '\w+') . ')?';
} else { } else {
$replace[] = '(' . (isset($pattern[$name]) ? $pattern[$name] : '\w+') . ')'; $replace[] = '(' . (isset($pattern[$name]) ? $pattern[$name] : '\w+') . ')';
} }
$value[] = $name; $value[] = $name;
} }
$val = str_replace($matches[0], $replace, $val); $val = str_replace($matches[0], $replace, $val);
if (preg_match('/^' . $val . '$/', $m1[$key], $match)) { if (preg_match('/^' . $val . '$/', isset($m1[$key]) ? $m1[$key] : '', $match)) {
array_shift($match); array_shift($match);
$match = array_slice($match, 0, count($value)); foreach ($value as $k => $name) {
$var = array_merge($var, array_combine($value, $match)); if (isset($match[$k])) {
$var[$name] = $match[$k];
}
}
continue; continue;
} else { } else {
return false; return false;