在开发日志列表显示界面时发现路由参数丢失的现象。
在CodeIgniter4的传统路由模式下,当控制器退回到默认方法时,在有些情况下会发生第一个参数丢失问题。
主要表现在第一个参数 为 0 false 这一类判断为假的值时。
在CodeIgniter4的传统路由模式下,当控制器退回到默认方法时,在有些情况下会发生第一个参数丢失问题。
主要表现在第一个参数 为 0 false 这一类判断为假的值时。
设置为增强路由模式时没有这个问题。那应该就是传统路由模式的一个bug了。
因为增强路由不支持 _remap 方法特性,这边需要使用传统路由,所以需要调查解决该bug。
在分析代码后找到了的出现问题地方,涉及一个文件的一个方法修改如下:
蓝色字体是原始代码,红色字体是新添加代码
文件: System/Router/AutoRouter.php
方法:public function getRoute(string $uri, string $httpVerb): array
方法:public function getRoute(string $uri, string $httpVerb): array
// Use the method name if it exists.
// If it doesn't, no biggie - the default method name
// has already been set.
if (! empty($segments)) {
//$this->method = array_shift($segments) ?: $this->method;
$methodParam = array_shift($segments);
if($methodParam !== null)
$this->method = $methodParam;
}
// If it doesn't, no biggie - the default method name
// has already been set.
if (! empty($segments)) {
//$this->method = array_shift($segments) ?: $this->method;
$methodParam = array_shift($segments);
if($methodParam !== null)
$this->method = $methodParam;
}
蓝色字体是原始代码,红色字体是新添加代码