闲谈

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

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

在application\config下的routes.php,配置如下

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

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

正题

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

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

打开system\core目录下的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,如果要改也是可以的
在application\config下的routes.php,添加

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

在system\core目录下的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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

CI框架 default_controller 如何设置为:'目录/Controller' 转的更多相关文章

  1. CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:

    19:29 2016/3/10CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:项目主路径:F:\wamp\www\graduationPr ...

  2. CI框架源码阅读笔记3 全局函数Common.php

    从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...

  3. CI框架源代码阅读笔记3 全局函数Common.php

    从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...

  4. CI 框架 隐藏index.php 入口文件 和 设置访问application下子目录

    1.隐藏根目录下 index.php, 在根目录下创建 .htaccess文件 内容如下: <IfModule mod_rewrite.c> RewriteEngine on Rewrit ...

  5. CI框架从哪里看起?CI框架怎么开始学习,CI的初始设置

    很多朋友不知道CI框架从哪里开始学起,想学一个新的框架其实并不难.只要你认真研究,自习摸索都很简单! 概述和基本配置参数 配置CI: application/config/config.php:14配 ...

  6. php CI框架目录结构及运行机制

    CI目录结构   CI主要组成部分为,application(应用文件夹).system(系统文件夹)和index.php入口文件.     应用文件夹中主要是存放控制器.模型和视图等,系统文件夹中主 ...

  7. CI框架源码阅读笔记8 控制器Controller.php

    最近时间有些紧,源码阅读系列更新有些慢.鉴于Controller中代码比较少,本次Blog先更新该文件的源码分析. 在经过路由分发之后,实际的应用Controller接管用户的所有请求,并负责与用户数 ...

  8. php上传zip文件在线解压文件在指定目录下,CI框架版本

    我从网上找的文件php在线解压zip压缩文件 文件为jy.php可以直接执行,但是怎样将其加到CI框架中呢?? jy.php文件 <?php header("content-Type: ...

  9. CI框架笔记

    @update 2016-4-2 13:45:35 一.目录结构 ci_demo ├─myapp 应用主目录 │ ├─autoload.php 自定义的自动加载文件(可选) │ ├─myapp.php ...

随机推荐

  1. hadoop学习通过虚拟机安装hadoop完全分布式集群

    要想深入的学习hadoop数据分析技术,首要的任务是必须要将hadoop集群环境搭建起来,可以将hadoop简化地想象成一个小软件,通过在各个物理节点上安装这个小软件,然后将其运行起来,就是一个had ...

  2. Linux 平台下的漏洞扫描器 Vuls

    导读 Vuls 是一款适用于 Linux/FreeBSD 的漏洞扫描程序,无代理,采用 Go 语言编写,对于系统管理员来说,每天必须执行安全漏洞分析和软件更新都是一个负担. 为避免生产环境宕机,系统管 ...

  3. leetcode717—1-bit and 2-bit Characters

    We have two special characters. The first character can be represented by one bit 0. The second char ...

  4. web.py利用模板的详细步骤

    <python网络编程学习笔记(10):webpy框架>(http://www.cnblogs.com/xiaowuyi/archive/2012/11/15/2771099.html#3 ...

  5. MyBatis在Oracle中插入数据并返回主键的问题解决

    引言:  在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2   SQL Snipp ...

  6. WPF应用

    代码 private void button1_Click(object sender, RoutedEventArgs e) { calculate sa = new calculate(int.P ...

  7. [BZOJ3809]Gty的二逼妹子序列[莫队+分块]

    题意 给出长度为 \(n\) 的序列,\(m\) 次询问,每次给出 \(l,r,a,b\) ,表示询问区间 \([l,r]\) 中,权值在 \([a,b]\) 范围的数的种类数. \(n\leq 10 ...

  8. wireshark找不到网卡

    在Capture Opinions中的interface若找不到网卡,一般是npf服务没有启动. npf是什么东东 Netgroup Packet Filter 网络数据包过滤器 NPF Device ...

  9. 【OpenCV学习笔记之一】图像加载,修改及保存

    加载图像(用cv::imread)imread功能是加载图像文件成为一个Mat对象 其中第一个参数表示图像文件名称第二个参数 表示加载的图像是什么类型 支持常见的三个参数值IMREAD_UNCHANG ...

  10. MODIS 数据产品预处理

    MODIS 数据产品预处理 1  MCTK重投影 第一步:安装ENVI的MCTK扩展工具 解压压缩包,将其中的mctk.sav与modis_products.scsv文件复制到如图所示,相应的ENVI ...