Codeigniter控制器支持多级目录
来源:互联网 发布:js执行按钮点击事件 编辑:程序博客网 时间:2024/04/30 12:48
< ?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * MY_Router Class * * Parses URIs and determines routing * * @author Longjianghu QQ:215241062 * @copyright Copyright © 2012-2013 www.spenote.com. All rights reserved. * @created 2012-06-21 * @updated 2012-06-21 * @link http://www.spenote.com/php/codeigniter_route.html */ 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' => '', 'number' => 0, 'path' => ''); $temp['number'] = count($segments) - 1; for($i = 0; $i <= $temp['number']; $i++) { $temp['path'] .= $segments[$i].'/'; if(is_dir(APPPATH.'controllers/'.$temp['path'])) { $temp['dir'][] = str_replace(array('/', '.'), '', $segments[$i]); } } $this->set_directory(implode('/', $temp['dir'])); $segments = array_diff($segments, $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
使用方法:把上面的代码另存为MY_Router.php,放在你应用目录的core目录下。假设你的应用放在application目录,哪么你把MY_Router.php文件放在application/core目录下即可:
原生的CI最多只支持一级目录,地址如下:controllers/directory/appname.php,现在你可以写成controllers/directory/directory/directory/appname.php,如果你不觉得累写多少都没关系 (^0^)。
现目前在Codeigniter 2.1.0、Codeigniter 2.1.1、Codeigniter 2.1.2都测试通过!
http://codeigniter.org.cn/forums/thread-13479-1-1.html 0 0
- Codeigniter控制器支持多级目录
- php CI3.0控制器多级目录支持
- Codeigniter 框架多级目录访问问题
- ci控制器controller只支持1级目录,如需多级要扩展路由类
- CI扩展支持多级目录
- CodeIgniter控制器
- CI路由重写,支持多级目录
- Asp.net Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则
- CodeIgniter模型-视图-控制器
- C/C++创建多级目录函数,支持windows和linux
- C/C++创建多级目录函数,支持windows和linux
- apache ant解压zip。支持多级目录解压
- ZIP解压缩文件的工具类【支持多级目录|全】
- codeigniter 控制器跳转报错
- 支持zip的压缩,zip的解压【支持一级目录的,不支持多级】
- 使codeigniter支持$_GET
- Codeigniter支持Redis缓存
- CodeIgniter文件目录树
- gearman消息发送示例
- ZOJ.2481 Unique Ascending Array【子集】 2015/09/24
- 如何查询安卓手机型号以及如何修改型号跟品牌
- 【二维码】:二维码的科普
- 设计模式 - 建造者模式(Builder)
- Codeigniter控制器支持多级目录
- nodejs如何请求路由,http和url模块
- 企业证书打包应用托管到第三方,iPhone4s安装失败。
- getPropertyDescriptors()获取类的属性
- Quartz作业调度框架
- 常用开源软件协议与创作协议极简介
- magento cms Widget
- jquery筛选数组之grep、each、inArray、map的用法及遍历json对象
- JAVA中常用的正则的一些案例分析