您的位置:首页 > 其它

CI扩展支持多级目录

2015-07-09 11:11 239 查看
由于原生的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: