CI框架教程4——将默认路由放到子文件下

        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.');
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值