Codeigniter 框架多级目录访问问题
来源:互联网 发布:高等电网络理论 编辑:程序博客网 时间:2024/05/18 01:43
在之前的文章中,我们基于codeigniter框架实现了插件结构。在controllers目录添加了plugin目录用来存放插件,例如我们添加了一个插件,将该插件的controller目录放到plugin下,这样访问地址就是../index.php?/plugin/插件包名/插件controller,这就涉及了多级目录问题。解决该问题我们需要在application的core目录下新建一个MY_Router.php文件,内容如下:
<?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
这样就能实现CodeIgniter的多级目录访问。
- Codeigniter 框架多级目录访问问题
- Codeigniter控制器支持多级目录
- CodeIgniter框架目录结构分析
- CodeIgniter框架大小写问题
- codeigniter框架目录结构、运行流程
- codeigniter框架目录结构及远行流程
- codeigniter源代码分析之框架目录结构
- 关于 codeigniter 前后台目录搭建问题
- php设置多级目录session的问题
- 用GridView解决多级目录问题
- CodeIgniter 框架
- Codeigniter框架前后台部署(多目录部署)
- ci(codeigniter)php框架再探-页面访问流程
- Codeigniter框架使用问题(持续更新……)
- CodeIgniter文件目录树
- 在php中用递归的方式创建多级目录(解决多级目录无法直接创建的问题)
- CodeIgniter php开发框架
- PHP框架之Codeigniter
- SQLNET.EXPIRE_TIME参数
- ExtJS(4)--Ext.FormPanel
- Ubuntu13.04安装wine qq2012
- 存储过程优化
- HDU 1196
- Codeigniter 框架多级目录访问问题
- popupwindow
- HDU Piggy-Bank
- PHP获取网络图片并显示到浏览器
- The Struts dispatcher cannot be found.
- restlet2.1 学习笔记(一) 入门
- 25 A Famous Music Composer
- yii框架下bootstrap的配置(ckeditor)
- [OpenGL Insights] Ch3. WebGL for OpenGL Developers