让编程改变世界

让编程改变世界、改变生活、改变自己

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



阅读更多
版权声明:转载时请标注http://blog.csdn.net/zhihua_w https://blog.csdn.net/Zhihua_W/article/details/76504490
个人分类: CodeIgniter
想对作者说点什么? 我来说一句

友盟分享遇到的坑

不喜勿喷

HR_0101 HR_0101

2016-09-05 20:02:15

阅读数:2845

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭