chzyer 发表于 2012-5-15 22:54:04

关于动态扩展controller-使其部分支持三级目录

本帖最后由 chzyer 于 2012-5-15 22:55 编辑

实际上CI的二级目录有时候不能满足需求.比如admincp.
admincp本身一般情况下需要两级目录,再加上admincp,那就是3级.但是其他可能仅仅需要两级目录便可满足需求.这样,我觉得有必要搞一个动态扩展controller的功能
我研究出一个方案
比如说/index.php/admincp/home/contact_us
可以在controller下建一个admincp-home.php的文件.

在admincp下给home提供跳转

对.当需要扩展的时候就调用expand_controller();
expand_controller()就是我们自己写的helper了

if ( ! function_exists('expand_controller')){
      function expand_controller(){
                $ci =& get_instance();
                $controller_name = $ci->uri->rsegments;
                $sub_controller_name = $ci->uri->rsegments;
                $default_method = isset($ci->uri->rsegments) ? $ci->uri->rsegments : 'index';
                $file_path = APPPATH."controllers/{$controller_name}-{$sub_controller_name}.php";
                if ( ! file_exists($file_path)){
                        show_404();
                }
               
                include $file_path;
                if ( ! class_exists($sub_controller_name)){
                        show_404();
                }

                $instance = new $sub_controller_name();
                $instance->{$default_method}();

      }
}


对于不需要扩展的还是可以沿用CI本身的结构.
不过,我只是抛砖引玉了一下,通过/index.php/admincp-home/访问还是会出现问题的.暂时的方法姑且是修改route.php

跟屁虫 发表于 2012-5-16 11:17:09

想问问楼主这用的是什么字体呢

行无疆 发表于 2012-5-27 01:34:30

.........................................................................

xywrbs 发表于 2012-7-30 10:27:39

sublime text2 哈~

大道达人 发表于 2012-7-31 15:21:00

本帖最后由 大道达人 于 2012-7-31 15:22 编辑

以前写过一个 无限级目录的
https://github.com/ftwbzhao/Code ... tem/core/Router.php在路由的时候下
                                // check sub-folder
                                if (is_dir(APPPATH.'controllers/'.$this->directory.$segments[0]))
                                {                       
                                        $this->set_directory($this->directory.$segments[0],TRUE);
                                        $segments = array_slice($segments, 1);
                                        $this->_validate_request(&$segments,TRUE);
                                }

页: [1]
查看完整版本: 关于动态扩展controller-使其部分支持三级目录