zoukankan      html  css  js  c++  java
  • 让Codeigniter控制器支持多级目录

     
    <?php
    if (!defined('BASEPATH')) {  exit ('No direct script access allowed');}
    class MY_Router extends CI_Router {
    public function __construct() { parent :: __construct(); $this->agent=load_class('user_agent'); //$this->directory='mobile/'; if ($this->agent->is_mobile()) { $this->directory='mobile/'; } } function set_directory($dir) { $this->directory = $this->directory.$dir . '/'; } function _validate_request($segments) { if (count($segments) == 0) { return $segments; } if (file_exists(APPPATH . 'controllers/'.$this->fetch_directory() . $segments[0] . '.php')) { return $segments; } if (is_dir(APPPATH . 'controllers/' .$this->fetch_directory(). $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) { 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 { 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'); } if (!file_exists(APPPATH . 'controllers/' . $this->fetch_directory() . $this->default_controller . '.php')) { $this->directory = ''; return array (); } } return $segments; } 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; } show_404($segments[0]); } }
    使用方法:把上面的代码另存为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都测试通过!
  • 相关阅读:
    egg-sequelize-ts 插件
    从理解webpack到配置
    jstree 学习
    谈谈对原型链的理解
    CSS 水平居中/布局 垂直居中 (月经问题)
    图片自然翻转并切换图片
    Javascript 高阶函数等
    django中related_name的作用和用法
    pycharm新建django项目,报错
    关于pycharm 使用sqlite创建数据库表,创建模型后,表找不到或者不显示。
  • 原文地址:https://www.cnblogs.com/hubing/p/4234156.html
Copyright © 2011-2022 走看看