关闭

CI扩展支持多级目录

217人阅读 评论(0) 收藏 举报
分类:

由于原生的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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3189次
    • 积分:126
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类