最近在使用CodeIgniter开发一个企业网站项目。一开始我是把前台和后台分开作为两个独立的项目,后来想想为什么不能放在一个项目里,就有了改造的想法。一、最终目录结构图application/|--config/||--routes.php|--控制器/||--后端/||--前端/|--核心/||--我的控制器.php||--MY_Router.php|--意见/||--后端/||--前端/|--静态/||--后端/||--frontend/|--index.php这样设计的好处:1.目录结构清晰2.index.phpcontrollers/backend和controllers/frontend目录下的controller可以分别继承不同的基类。例如:后台控制器继承基类Backend_Controller,前台控制器继承基类Frontend_Controller。MY_Controller扩展了核心系统类CI_Controller,可以根据业务需要增加一些公共功能。Backend_Controller和Frontend_Controller都继承自MY_Controller。那么问题来了,Backend_Controller和Frontend_Controller是在哪里定义的。答案如下:default_controller,'%[^/]/%s',$class,$method)!==2){$method='index';}if(!file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')){//之后会触发404return;}关键在定义MY_Router类,重写_set_default_controller方法default_controller)){show_error('无法确定应该显示什么。路由文件中没有指定默认路由。');}if(sscanf($this->default_controller,'%[^/]/%s',$class,$method)!==2){$method='index';}if(is_dir(APPPATH.'controllers/'.$class)){$this->set_directory($class);$类=$方法;如果(sscanf($method,'%[^/]/%s',$class,$method)!==2){$method='index';}}if(!file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')){return;}$this->set_class($class);$this->set_method($method);$this->uri->rsegments=[1=>$class,2=>$method];}}演示地址
