CI路由重写,支持多级目录

转的


<?php



if (!defined('BASEPATH'))
    exit('No direct script access allowed');


/**
 * 自定义路由类 
 * 
 * 让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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值