Codeigniter框架在版本3.0以前还可以将默认路由地址设置到子文件下中,在3.0以后就不可以了,本篇博文内容就是基于这一问题提出的解决方案。比如你想设置的默认路由地址application文件夹下controller文件夹下的home模块中(在路由配置文件中这样写):
$route['default_controller'] = 'home/index';
这样的话在Codeigniter框架3.0以后的版本中会报错,解决此问题的方法就是首先找到 system > core > router.PHP 文件中的下列代码。 ( 我的是 3.1.0版本 ) 代码如下: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;
修改完成即可访问。
或者将下方方法代码进行替换:
protected function _set_default_controller() { if (empty($this->default_controller)) { show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.'); } //20170616 ZHIHUAWEI 修改 /* 修改默认控制器支持 子目录/控制器/方法 start.... */ $temp = explode('/', $this->default_controller); //如果是三个值(形如 $route['default_controller'] = "index/home/index"; )就做处理 if (count($temp) == 3) { $dir = $temp[0]; $class = $temp[1]; $method = $temp[2]; $this->set_directory($dir); if (!file_exists(APPPATH . 'controllers/' . $this->directory . ucfirst($class) . '.php')) { // This will trigger 404 later return; } $this->set_class($class); $this->set_method($method); // Assign routed segments, index starting from 1 $this->uri->rsegments = array( 1 => $dir,//这里uri参数加上目录名 2 => $class, 3 => $method ); log_message('debug', 'No URI present. Default controller set.'); return;//返回,不再往下走 } /* 修改默认控制器支持 子目录/控制器/方法 end.... */ // Is the method being specified? if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) { $method = 'index'; } if ( ! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')) { // This will trigger 404 later return; } $this->set_class($class); $this->set_method($method); // Assign routed segments, index starting from 1 $this->uri->rsegments = array( 1 => $class, 2 => $method ); log_message('debug', 'No URI present. Default controller set.'); }
CI框架教程4——将默认路由放到子文件下
最新推荐文章于 2021-03-10 11:08:39 发布