能否创建共享控制器/模型/视图的多CodeIgniter应用,使用独立配置文件?
当然可以实现!这是CodeIgniter里非常实用的多应用共享核心场景,我来给你详细拆解实现步骤:
第一步:规划目录结构
首先你需要把共享的核心文件和独立应用的配置分开,推荐的目录结构如下:
your_project/ ├── core_shared/ # 存放所有应用共享的controller、model、view │ ├── controllers/ │ ├── models/ │ └── views/ ├── app_client/ # 第一个独立应用(比如面向客户端) │ ├── application/ │ │ ├── config/ # 独立的config.php、database.php就在这里 │ │ ├── cache/ # 独立的缓存目录 │ │ └── logs/ # 独立的日志目录 │ └── index.php # 应用入口文件 ├── app_admin/ # 第二个独立应用(比如后台管理) │ ├── application/ │ │ ├── config/ │ │ ├── cache/ │ │ └── logs/ │ └── index.php └── system/ # CodeIgniter官方的system核心文件夹(全应用共享)
第二步:修改每个应用的入口文件
每个应用的index.php是关键,我们需要在这里指定共享的system路径、当前应用的独立配置路径,以及共享的核心文件路径。
以app_client/index.php为例,找到以下默认配置行:
$system_path = 'system'; $application_folder = 'application';
修改为:
// 指向共享的system文件夹(根据你的目录层级调整路径) $system_path = '../system'; // 当前应用的独立配置目录 $application_folder = 'application'; // 定义共享核心文件的路径 define('SHARED_CONTROLLERS', '../core_shared/controllers'); define('SHARED_MODELS', '../core_shared/models'); define('SHARED_VIEWS', '../core_shared/views');
其他应用的index.php做同样的修改,注意路径要对应自己的目录层级。
第三步:自定义Loader类来加载共享文件
为了让CodeIgniter优先加载共享目录里的controller、model、view,我们需要扩展CI的Loader类(不要直接修改system核心文件,方便后续升级)。
在每个应用的application/libraries/目录下创建MY_Loader.php(如果没有这个目录就新建),内容如下:
<?php class MY_Loader extends CI_Loader { public function __construct() { parent::__construct(); // 把共享路径添加到加载队列的最前面,优先加载共享文件 $this->_ci_controller_paths = array(SHARED_CONTROLLERS => '') + $this->_ci_controller_paths; $this->_ci_model_paths = array(SHARED_MODELS => '') + $this->_ci_model_paths; $this->_ci_view_paths = array(SHARED_VIEWS => '') + $this->_ci_view_paths; } }
这样设置后,当CI加载控制器、模型或视图时,会先去共享目录查找,如果找不到再去当前应用的对应目录查找——这意味着你还可以在单个应用里创建同名文件,覆盖共享的内容,非常灵活。
第四步:配置独立的应用参数
每个应用的application/config/目录里只需要存放你需要独立设置的文件,比如config.php(设置不同的base_url、加密密钥等)、database.php(连接不同的数据库)。
另外,记得在每个应用的config.php里设置独立的缓存和日志路径,避免多个应用互相干扰:
$config['cache_path'] = APPPATH . 'cache/'; $config['log_path'] = APPPATH . 'logs/';
一些实用的注意事项
- 权限设置:确保
core_shared目录的读写权限让所有应用都能访问 - 路由自定义:每个应用可以在自己的
application/config/routes.php里设置独立的路由规则,映射共享的控制器 - CI版本升级:因为
system文件夹是共享的,后续升级CodeIgniter只需要替换一次system目录即可,所有应用都会受益 - 特殊文件处理:如果某个应用需要单独的库、钩子或语言包,直接放在对应应用的
application/目录下即可,CI会优先加载这些文件
这样设置后,你只需要维护core_shared里的controller、model、view,所有应用都会同步更新,完全满足你的需求!
内容的提问来源于stack exchange,提问作者Mattia
相关产品推荐
相关产品推荐

