从 3.x 升级到 4.x
CodeIgniter 4 是框架的重写,并且不向后兼容。将你的应用程序转换更合适,而不是升级它。一旦你完成了转换,从 CodeIgniter 4 的一个版本升级到下一个版本将很简单。
“精简、敏捷、简单”的理念仍然保留,但实现与 CodeIgniter 3 有很多不同。
升级没有 12 步检查表。相反,请在一个新的项目文件夹中使用 CodeIgniter 4 的副本开始, 选择 你希望的安装和使用方式, 然后转换和集成你的应用组件。 我们将尽量指出这里最重要的注意事项。
为了升级你的项目,我们总结出两项主要工作。首先,有一些对每个项目都很重要的一般调整,必须处理。其次是 CodeIgniter 构建的库,包含一些最重要的函数。这些库可以互相独立工作,所以你必须一一查看它们。
在启动项目转换之前,请阅读用户指南!
一般调整
下载
CI4 仍以 ready-to-run 压缩包或 tarball 形式提供。
它也可以使用 Composer 安装。
命名空间
CI4 是为 PHP 7.4+ 构建的,框架中的所有内容都使用了命名空间,除了 helper 和 lang 文件。
应用程序结构
application 文件夹重命名为 app,框架仍然有 system 文件夹,与以前的解释相同。
框架现在提供了 public 文件夹,旨在作为你的应用程序的文档根目录。
defined('BASEPATH') OR exit('No direct script access allowed');
这一行不是必需的,因为在默认配置下, public 文件夹之外的文件不可访问。 并且 CI4 不再定义常量BASEPATH
,所以在所有文件中删除该行。还有一个 writable 文件夹,用于保存缓存数据、日志和 session 数据。
app 文件夹与 CI3 的 application 非常相似,只是一些名称更改,一些子文件夹移到了 writable 文件夹。
不再有嵌套的 application/core 文件夹,因为我们有一个不同的机制来扩展框架组件(见下文)。
路由
模型、视图和控制器
CodeIgniter 基于 MVC 概念。因此,模型、视图和控制器的更改是你必须处理的最重要的事项之一。
在 CodeIgniter 4 中,模型现在位于 app/Models 中,在打开的 php 标记之后,你必须添加
namespace App\Models;
以及use CodeIgniter\Model;
。最后一步是将extends CI_Model
替换为extends Model
。CodeIgniter 4 的视图已移至 app/Views。此外,你必须将加载视图的语法从
$this->load->view('directory_name/file_name')
更改为echo view('directory_name/file_name');
。CodeIgniter 4 的控制器必须移至 app/Controllers。之后,在打开的 php 标记后添加
namespace App\Controllers;
。最后,将extends CI_Controller
替换为extends BaseController
。有关更多信息,我们推荐你参考以下升级指南,这些指南将为你提供一些分步说明,以在 CodeIgniter4 中转换 MVC 类:
类加载
库
你的应用类仍然可以放在 app/Libraries 中,但不必这样做。
不再使用 CI3 的
$this->load->library('x');
,现在可以使用$this->x = new \App\Libraries\X();
,遵循你组件的命名空间约定。或者,你可以使用 工厂:$this->x = \CodeIgniter\Config\Factories::libraries('X');
。
辅助函数
辅助函数 与以前基本相同,尽管有些进行了简化。
从 v4.3.0 开始,你可以通过 app/Config/Autoload.php 自动加载辅助函数,就像 CI3 一样。
CodeIgniter 3 中的一些辅助函数在版本 4 中不再存在。对于所有这些辅助函数,你必须找到一种新的方法来实现你的函数。这些辅助函数是 CAPTCHA Helper, Email Helper, Path Helper 和 Smiley Helper。
CI3 的 Download Helper 已移除。你需要在使用
force_download()
的地方使用 Response 对象。 请参阅 强制文件下载。CI3 的 Language Helper 已移除。但在 CI4 中
lang()
始终可用。请参阅lang()
。CI3 的 Typography Helper 在 CI4 中将是 排版库。
CI3 的 Directory Helper 和 File Helper 在 CI4 中将是 文件系统辅助函数。
CI3 的 String Helper 函数 在 CI4 的 文本辅助函数 中。
- 在 CI4 中,
redirect()
与 CI3 中的完全不同。 在 CI4 中,
redirect()
返回一个RedirectResponse
实例,而不是重定向和终止脚本执行。你必须返回它。你需要将 CI3 的
redirect('login/form')
改为return redirect()->to('login/form')
。
- 在 CI4 中,
钩子
扩展框架
你不需要 core 文件夹来保存
MY_...
框架组件扩展或替换文件。你不需要在 libraries 文件夹中使用
MY_X
类来扩展或替换 CI4 组件。将这些类放在任何地方,并在 app/Config/Services.php 中添加适当的服务方法来加载你的组件,而不是默认组件。
详细信息请参见 创建核心系统类。
升级库
你的应用类仍然可以放在 app/Libraries 中,但不必这样做。
不再使用 CI3 的
$this->load->library('x');
,现在可以使用$this->x = new \App\Libraries\X();
,遵循你组件的命名空间约定。或者,你可以使用 工厂:$this->x = \CodeIgniter\Config\Factories::libraries('X');
。CodeIgniter 3 中的一些库在版本 4 中不再存在。对于所有这些库,你必须找到一种新的方法来实现你的函数。这些库是 日历, FTP, Javascript, 购物车, 引用通告, XML-RPC /服务器 和 Zip 编码。
存在于两个 CodeIgniter 版本中的所有其他库都可以通过一些调整来升级。 最重要和使用最广泛的库都有一个升级指南,它将通过简单的步骤和示例帮助你调整代码。