mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 23:22:48 +08:00
Route参数增加merge_extra_vars参数 设置是否合并最后变量
This commit is contained in:
@@ -783,17 +783,20 @@ class Route
|
|||||||
}
|
}
|
||||||
$len1 = substr_count($url, '/');
|
$len1 = substr_count($url, '/');
|
||||||
$len2 = substr_count($rule, '/');
|
$len2 = substr_count($rule, '/');
|
||||||
|
// 多余参数是否合并
|
||||||
|
$merge = !empty($option['merge_extra_vars']) ? true : false;
|
||||||
|
|
||||||
if ($len1 >= $len2 || strpos($rule, '[')) {
|
if ($len1 >= $len2 || strpos($rule, '[')) {
|
||||||
if ('$' == substr($rule, -1, 1)) {
|
if ('$' == substr($rule, -1, 1)) {
|
||||||
// 完整匹配
|
// 完整匹配
|
||||||
if ($len1 != $len2 && false === strpos($rule, '[')) {
|
if (!$merge && $len1 != $len2 && false === strpos($rule, '[')) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
$rule = substr($rule, 0, -1);
|
$rule = substr($rule, 0, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$pattern = array_merge(self::$pattern, $pattern);
|
$pattern = array_merge(self::$pattern, $pattern);
|
||||||
if (false !== $match = self::match($url, $rule, $pattern)) {
|
if (false !== $match = self::match($url, $rule, $pattern, $merge)) {
|
||||||
// 匹配到路由规则
|
// 匹配到路由规则
|
||||||
// 检测是否定义路由
|
// 检测是否定义路由
|
||||||
if (!empty($option['after_behavior'])) {
|
if (!empty($option['after_behavior'])) {
|
||||||
@@ -813,7 +816,7 @@ class Route
|
|||||||
// 执行闭包
|
// 执行闭包
|
||||||
return ['type' => 'function', 'function' => $route, 'params' => $match];
|
return ['type' => 'function', 'function' => $route, 'params' => $match];
|
||||||
}
|
}
|
||||||
return self::parseRule($rule, $route, $url, $match);
|
return self::parseRule($rule, $route, $url, $match, $merge);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -927,12 +930,14 @@ class Route
|
|||||||
* @param string $url URL地址
|
* @param string $url URL地址
|
||||||
* @param string $rule 路由规则
|
* @param string $rule 路由规则
|
||||||
* @param array $pattern 变量规则
|
* @param array $pattern 变量规则
|
||||||
|
* @param bool $merge 合并额外变量
|
||||||
* @return array|false
|
* @return array|false
|
||||||
*/
|
*/
|
||||||
private static function match($url, $rule, $pattern)
|
private static function match($url, $rule, $pattern, $merge)
|
||||||
{
|
{
|
||||||
$m1 = explode('/', $url);
|
$m2 = explode('/', $rule);
|
||||||
$m2 = explode('/', $rule);
|
$m1 = explode('/', $url, $merge ? count($m2) : null);
|
||||||
|
|
||||||
$var = [];
|
$var = [];
|
||||||
foreach ($m2 as $key => $val) {
|
foreach ($m2 as $key => $val) {
|
||||||
// val中定义了多个变量 <id><name>
|
// val中定义了多个变量 <id><name>
|
||||||
@@ -985,16 +990,18 @@ class Route
|
|||||||
* @param string $route 路由地址
|
* @param string $route 路由地址
|
||||||
* @param string $pathinfo URL地址
|
* @param string $pathinfo URL地址
|
||||||
* @param array $matches 匹配的变量
|
* @param array $matches 匹配的变量
|
||||||
|
* @param bool $merge 合并额外变量
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
private static function parseRule($rule, $route, $pathinfo, $matches)
|
private static function parseRule($rule, $route, $pathinfo, $matches, $merge)
|
||||||
{
|
{
|
||||||
// 获取URL地址中的参数
|
|
||||||
$paths = explode('/', $pathinfo);
|
|
||||||
// 获取路由地址规则
|
|
||||||
$url = is_array($route) ? $route[0] : $route;
|
|
||||||
// 解析路由规则
|
// 解析路由规则
|
||||||
$rule = explode('/', $rule);
|
$rule = explode('/', $rule);
|
||||||
|
// 获取URL地址中的参数
|
||||||
|
$paths = explode('/', $pathinfo, $merge ? count($rule) : null);
|
||||||
|
// 获取路由地址规则
|
||||||
|
$url = is_array($route) ? $route[0] : $route;
|
||||||
|
|
||||||
foreach ($rule as $item) {
|
foreach ($rule as $item) {
|
||||||
$fun = '';
|
$fun = '';
|
||||||
if (0 === strpos($item, '[:')) {
|
if (0 === strpos($item, '[:')) {
|
||||||
|
|||||||
Reference in New Issue
Block a user