CI扩展支持多级目录

原创 2015年07月09日 11:11:11

由于原生的ci只支持2层目录,现扩展:将my_Router放在core文件中

<?php 
if (!defined('ROOTPATH')) {
    $url = (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http') . '://' . $_SERVER["HTTP_HOST"] . '/error404';
    header('Location: ' . $url, TRUE, 302);
    exit();
}


/**
 * 自定义路由类
 *
 * 让CI控制器支持多级目录
 *
 * @author      SOHOCN.NET
 * @copyright   Copyright © 2012 - 2018 www.sohocn.net All rights reserved.
 * @created     2012-12-13
 * @updated     2012-12-13
 * @version     1.0
*/


class MY_Router extends CI_Router
{
    /**
     *  Set the directory name
     *
     * @access  public
     * @param   string
     * @return  void
     */
    function set_directory($dir)
    {
        $this->directory = $dir.'/';
    }


    /**
     * Validates the supplied segments.  Attempts to determine the path to
     * the controller.
     *
     * @access  private
     * @param   array
     * @return  array
     */


    function _validate_request($segments)
    {
        if (count($segments) == 0)
        {
            return $segments;
        }


        // Does the requested controller exist in the root folder?
        if (file_exists(APPPATH.'controllers/'.$segments[0].'.php'))
        {
            return $segments;
        }


        // Is the controller in a sub-folder?
        if (is_dir(APPPATH.'controllers/'.$segments[0]))
        {
            $temp = array('dir' => array(), 'path' => APPPATH.'controllers/');


            foreach($segments as $k => $v)
            {
                $temp['path'] .= $v.'/';


                if(is_dir($temp['path']))
                {
                    $temp['dir'][] = $v;
                    unset($segments[$k]);
                }
            }


            $this->set_directory(implode('/', $temp['dir']));
            $segments = array_values($segments);
            unset($temp);


            if (count($segments) > 0)
            {
                // Does the requested controller exist in the sub-folder?
                if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].'.php'))
                {
                    if ( ! empty($this->routes['404_override']))
                    {
                        $x = explode('/', $this->routes['404_override']);


                        $this->set_directory('');
                        $this->set_class($x[0]);
                        $this->set_method(isset($x[1]) ? $x[1] : 'index');


                        return $x;
                    }
                    else
                    {
                        show_404($this->fetch_directory().$segments[0]);
                    }
                }
            }
            else
            {
                // Is the method being specified in the route?
                if (strpos($this->default_controller, '/') !== FALSE)
                {
                    $x = explode('/', $this->default_controller);


                    $this->set_class($x[0]);
                    $this->set_method($x[1]);
                }
                else
                {
                    $this->set_class($this->default_controller);
                    $this->set_method('index');
                }


                // Does the default controller exist in the sub-folder?
                if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.'.php'))
                {
                    $this->directory = '';
                    return array();
                }


            }


            return $segments;
        }




        // If we've gotten this far it means that the URI does not correlate to a valid
        // controller class.  We will now see if there is an override
        if ( ! empty($this->routes['404_override']))
        {
            $x = explode('/', $this->routes['404_override']);


            $this->set_class($x[0]);
            $this->set_method(isset($x[1]) ? $x[1] : 'index');


            return $x;
        }




        // Nothing else to do at this point but show a 404
        show_404($segments[0]);
    }
}
// END MY_Router Class

ci控制器controller只支持1级目录,如需多级要扩展路由类

core/Router.php function _validate_request($segments) { if (count($segments) == 0) { retu...

ZIP解压缩文件的工具类【支持多级目录|全】

ZIP解压缩文件的工具类【支持多级目录|全】 作者:Vashon 网上有很多的加压缩示例代码,但是都只是支持一级目录的操作,如果存在多级目录的话就不行了。本解压缩工具类经过多次检查及重构,最终分享...

python 多级目录压缩解压文件

咱向来就是拿来主意,也发个东西供同行“拿来”使用吧 咱信奉的就是少量的代码完成大量的工作,虽然代码不多,但还是要用大脑的。发出来供大家参考 功能: 支持中文路径,支持多级目录支持跨平台,在l...
  • sondx
  • sondx
  • 2011年09月30日 18:05
  • 3236

初学自制复制文件多级目录

  • 2015年08月07日 00:02
  • 1KB
  • 下载

Android中多级树目录的实现方式

  • 2014年10月26日 23:37
  • 1.61MB
  • 下载

“Word文件设置了多级列表,却还是不能创建目录”的解决办法

在编辑Word文件时,尽管设置了多级列表,但还是不能成功添加目录。一个主要的问题是, 系统读到的各个列表的大纲级别都是“正文文本”,那么我们做法是:如下图,首先将光标置于需要添加至目录的标题处,然后...

Word中如何设置自动生成多级目录

  • 2017年03月15日 21:57
  • 980KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CI扩展支持多级目录
举报原因:
原因补充:

(最多只允许输入30个字)