• CI框架 default_controller 如何设置为:'目录/Controller' 转


    闲谈

    前几天,我的室友发现了一个问题:CI框架的Router.php文件的default_controller设置为applicationcontrollers文件下的 一级PHP文件名 就可以,设置为 目录/Controller名 就 404,如目录结构:

    ----application
       |
       ----controllers
           |
           -----admin
           |    |
           ---------Welcome.php
           |
           ----Welcome.php
    

    在applicationconfig下的routes.php,配置如下

    $route['default_controller'] = 'welcome';          这样就可以
    $route['default_controller'] = 'admin/welcome';    这样不可以
    

    一开始以为是哪里配置错了,但没道理啊,主要的只有这个配置。我开始怀疑是CI版本的问题,到网上一查,果然有相同问题的道友,不过没有找到确切的解决方案,也许是应为安全性的问题,3.x 版本的都不能这样设置了。

    正题

    博主尝试着决解这个问题。博主的CI版本为3.1.4

    看了源码才知道原来 $route['default_controller'] 的值是 '类名/方法名' 而不是 '路径/类名'

    打开systemcore目录下的Router.php, 大概在298行

    //将下面的代码注释掉
    /**
    if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2)
    {
        $method = 'index';
    }
    **/
    //并上面的代码后面加上 下面的代码
    $index = strripos($this->default_controller, '/');  // 记录 符号‘/’的下标
    if($index == false){
        $class = $this->default_controller; // 没有‘/’ 的可以直接赋值
    }else{
        $this->directory = substr($this->default_controller, 0, $index + 1); //目录的字符串
        $class  = substr($this->default_controller, $index + 1);  //类的字符串
    }
    $method = $this->method;  //默认方法
    

    如果是 '路径/类名' ,以上的配置就够了

    添加Controller默认的方法名

    当然可以设置默认的方法名 , 一般是index,如果要改也是可以的
    在applicationconfig下的routes.php,添加

    $route['method'] = 'index';  //默认的方法名
    

    在systemcore目录下的Router.php,大概在176行,添加

    if (isset($route) && is_array($route))
        {
            isset($route['default_controller']) && $this->default_controller = $route['default_controller'];
            isset($route['translate_uri_dashes']) && $this->translate_uri_dashes = $route['translate_uri_dashes'];
            unset($route['default_controller'], $route['translate_uri_dashes']);
            $this->routes = $route;
            isset($route['method']) && $this->method = $route['method'];  // 添加这一句代码就可以了
        }
    

    这样就可以了,希望对你有帮助。



    作者:止境_af83
    链接:https://www.jianshu.com/p/e6615ee734e7
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    完整的WSDL语法
    WSDL UDDI
    八一八 The Social Network的小细节
    MySQL命令行常用命令
    AspectJ风格的Aop切点表达式
    强大的Mockito测试框架
    MySQL锁定状态查看命令
    Yum本地Rpm库设置
    Sed实例大全
    为何 Emacs 和 Vim 被称为两大神器
  • 原文地址:https://www.cnblogs.com/brady-wang/p/9808879.html
Copyright © 2020-2023  润新知