CodeIgniter 不支持自动更新,CI4小版本升级仅靠composer update实现,CI3升CI4实为重写;需手动处理命名空间、路由、数据库、配置等变更,无内置迁移或热重载机制。

CodeIgniter 本身不提供“自动更新”能力——没有后台检查、一键下载、静默覆盖这类功能。所谓“保持最新”,只能靠开发者主动执行升级流程,且 CI3 → CI4、CI4 小版本之间策略完全不同。
CI4 小版本升级(如 4.1.4 → 4.1.5)只需 composer update
这是唯一接近“自动化”的场景,但本质仍是手动触发:
-
composer require codeigniter4/framework:"^4.1.5"或composer update codeigniter4/framework即可拉取新版核心 - 必须检查
app/Config/下配置类是否有字段变更(如Security.php新增$tokenRandomize) - 小版本通常不破坏接口,但需验证
php spark routes能正常输出,php spark test不报核心类加载错误 - 别跳过
composer show codeigniter4/framework确认实际安装版本,避免因composer.lock锁定旧版
CI3 升级到 CI4 不是升级,是重写
运行 composer update codeigniter/framework 会直接失败,因为 CI4 的命名空间、目录结构、路由语法、模型机制全部不兼容:
- 控制器必须从
CI_Controller改为App\Controllers\BaseController,且加namespace App\Controllers; -
application/config/routes.php的$route['news/(:any)'] = 'news/view/$1';写法在 CI4 中无效,得改用$routes->get('news/(:segment)', 'News::view/$1'); -
$this->db->query()返回的是CodeIgniter\Database\Result对象,不是数组;要取数据得调getResult()或getRow() - 所有
config/*.php文件必须重写为类(如Database.php),不能直接复制旧数组配置
别信“自动更新数据库结构”或“自动同步配置”
CI 没有迁移工具集成(不像 Laravel 的 migrate),也没有配置热重载:
- 数据库变更只能靠手写 SQL 或用第三方库(如
phinx),CI4 自带的spark migrate是空壳,需自行实现 -
app/Config/App.php里的$version是静态字符串,改完必须部署才生效,不存在运行时读取 git tag 或远程 API 动态更新 - 想让 APP 检测新版本?得自己写
Api\VersionController::current()接口返回config('App')->version,再由客户端比对——这和框架“自动更新”无关
真正容易被忽略的点:CI4 小版本升级后,spark 命令可能仍显示旧版本号,是因为 spark 脚本缓存了 vendor/autoload.php 路径;遇到这种情况,删掉 vendor/codeigniter4/framework/spark 并重新 composer dump-autoload 才能刷新。


















