ci4将配置升级为可实例化、可继承、可环境覆盖的类,存放于app/config/下,需通过config('classname')获取实例,支持多环境自动加载及面向对象路由定义。

CodeIgniter 3 和 4 的配置文件结构差异很大,不是简单改个位置或格式,而是整套设计逻辑变了——CI4 把配置从“全局数组”升级为“可实例化、可继承、可环境覆盖的类”,更安全也更灵活。
配置文件存放位置和命名方式不同
CI3 的配置文件全在 application/config/ 目录下,比如 database.php、routes.php,每个都是返回一个关联数组的 PHP 文件;CI4 则统一放在 app/Config/ 下,且每个配置项都对应一个类(如 Database.php、Routes.php),类名与文件名一致,并继承 BaseConfig。
- CI3 示例:
application/config/database.php→return [ 'default' => [ 'hostname' => 'localhost' ] ]; - CI4 示例:
app/Config/Database.php→class Database extends BaseConfig { public $default = [ 'hostname' => 'localhost' ]; }
配置读取方式完全不同
CI3 用全局函数 $this->config->load() 或直接包含;CI4 不再支持直接 include,必须通过 config('ClassName') 获取实例,框架自动处理实例化和缓存。
-
$db = config('Database');→ 返回Config\Database实例 -
$db->default['hostname']→ 直接访问属性,不用数组键嵌套 - 不加参数调用
config('App')会复用已有实例,提升性能
环境配置机制彻底重构
CI3 靠 ENVIRONMENT 常量 + 手动判断分支;CI4 内置多环境支持,通过 app/Config/Boot/ 下的 development.php、production.php 自动加载,还能在配置类里用 if (ENVIRONMENT === 'development') 做条件赋值。
- 开发时调试开关要同时改
index.php中的ENVIRONMENT和确保app/Config/Boot/development.php被加载,否则display_errors不生效 - 生产环境配置可单独放在服务器非 Web 可访问路径,通过命名空间映射加载,避免敏感信息泄露
路由配置不再是普通数组
CI3 的 routes.php 是一个 $route 数组;CI4 的 Routes.php 是一个类,里面用 $routes->get()、$routes->post() 等方法注册,语法更清晰,也支持分组、过滤器、命名路由等高级功能。
-
$routes->get('/home', 'Home::index');—— 显式定义,不再有自动路由 - 默认禁用自动路由(
$routes->setAutoRoute(false)),必须手动写才生效 - 所有控制器方法绑定必须带命名空间前缀(
Home::index),但不用写完整App\Controllers\Home











