欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
给服务器安装rzsz工具,方便通过终端临时上传下载文件 通过扩展CodeIgniter 4 核心类的方式实现SQL执行数量的统计功能
未知  CodeIgniter4 中传统路由模式 实现退回默认控制器的功能
[ 发布日期:1年前 (2023-11-24) ]   [ 来自:本站原创 ] [分类:其它运维与编程]
CodeIgniter4的增强路由模式下,如果找不到控制器,会退回到默认控制器进行处理。
但是传统路由模式没有这个功能。

退回默认路由的功能可以方便统一进行错误处理,尤其是开发api网关的情况。

通过阅读分析框架代码,找到了实现方法,同样涉及的是传统路由的文件。修改如下:

文件: System/Router/AutoRouter.php
方法:public function getRoute(string $uri, string $httpVerb): array

public function getRoute(string $uri, string $httpVerb): array
    {
        $segments = explode('/', $uri);

        // WARNING: Directories get shifted out of the segments array.
        $segments = $this->scanControllers($segments);
        //增加变量保存默认Controller名称
        $defController = $this->controller;

        // If we don't have any segments left - use the default controller;
        // If not empty, then the first segment should be the controller
        if (! empty($segments)) {            
            $this->controller = ucfirst(array_shift($segments));
        }

        $controllerName = $this->controllerName();

        //判断Controller是否存在       
        $file = APPPATH . 'Controllers/' . $this->directory . $controllerName . '.php';
        if ($defController !== $this->controller && !is_file($file)) {          
            //Controller不存在,退回默认Controller,并将段值放入数组            
            array_unshift($segments, lcfirst($this->controller));
            $this->controller = $defController;
            $controllerName = $this->controllerName();
        }
        //end 判断


        if (! $this->isValidSegment($controllerName)) {
            throw new PageNotFoundException($this->controller . ' is not a valid controller name');
        }

上面红色代码是增加的处理逻辑。
其它的没有变更。
引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/269
复制引用地址https://www.rickw.cn/trackback/269/GBK
[ 分类:其它运维与编程  | 查看:239 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5