You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否创建共享控制器/模型/视图的多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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:33:44