版本 4.2.0
发布日期:2022 年 6 月 3 日
CodeIgniter 4.2.0 版发布
亮点
- 将最低 PHP 要求更新为 7.4。 
- 为了使默认配置更安全,默认情况下关闭了自动路由。 
- 查询构建器对 子查询 和 UNION 的支持(由 Andrey Pyzhikov 贡献)。参见 数据库。 
新贡献者
- @fdomgjoni99 在 #5608 中做出了他们的首次贡献 
- @beganovich 在 #5823 中做出了他们的首次贡献 
- @michaelrk02 在 #5878 中做出了他们的首次贡献 
- @valmorflores 在 #6051 中做出了他们的首次贡献 
- @lonnie-vault 在 #6060 中做出了他们的首次贡献 
不兼容变更
方法签名更改
- CodeIgniter\Database\BaseBuilder::join()和- CodeIgniter\Database\*\Builder::join()的方法签名已更改。
- Validation::setRule()的方法签名已更改。删除了- $rules参数上的- string类型提示。扩展类应相应地删除参数,以免破坏LSP。
- CodeIgniter\CLI\CommandRunner::_remap()的方法签名已更改以修复一个错误。
- Service::reset()和- CIUnitTestCase::resetServices()的默认参数值已从- false更改为- true。这是为了在测试期间消除意外问题,例如- lang()获取不到翻译消息。
行为变化
- CodeIgniter\CodeIgniter类有了一个新属性- $context,它在运行时必须有正确的上下文。因此,以下文件已更改:
- public/index.php
- spark
 
 
- system/bootstrap.php文件已修改,可以轻松实现 预加载。返回- CodeIgniter实例和加载- .env文件已移动到- index.php和- spark中。
- CodeIgniter\Autoloader\Autoloader::initialize()已更改行为以修复一个错误。以前,当- $modules->discoverInComposer为 true 时,它只使用 Composer 的类映射。现在,如果可用,它总是使用 Composer 的类映射。
- 修复了一个错误,更改了通过 CLI::color() 输出的颜色代码。 
- 为防止来自网页浏览器的意外访问,如果控制器添加到 cli 路由中( - $routes->cli()),则该控制器的所有方法都不再通过自动路由访问。
- 对于那些扩展历史记录收集器的用户,他们可能需要更新 - History::setFiles()方法,这可能会破坏向后兼容性。
- 修复了 - dot_array_search()的意外行为。现在- dot_array_search('foo.bar.baz', ['foo' => ['bar' => 23]])返回- null。以前的版本返回- 23。
- CodeIgniter::storePreviousURL()已更改为仅存储 Content-Type 为- text/html的 URL。它还会影响- previous_url()和- redirect()->back()的行为。
增强功能
新的改进的自动路由
添加了一个可选的新的更安全的自动路由器。这些是与传统自动路由的更改:
- 控制器方法需要 HTTP 动词前缀,如 getIndex()、postCreate()。
- 开发人员总是知道 HTTP 方法,因此不期望的 HTTP 方法的请求不会通过。 
 
 
- 控制器方法需要 HTTP 动词前缀,如 
- 默认控制器(默认为 Home)和默认方法(默认为index)必须在 URI 中省略。
- 它限制控制器方法和 URI 之间的一对一对应关系。 
- 例如,默认情况下,你可以访问 - /,但- /home和- /home/index会返回 404。
 
 
- 默认控制器(默认为 
- 它检查方法的参数数。
- 如果 URI 中的参数多于方法的参数,则结果为 404。 
 
 
- 它不支持 _remap()方法。
- 它限制控制器方法和 URI 之间的一对一对应关系。 
 
 
- 它不支持 
- 无法访问定义路由中的控制器。
- 它完全区分通过 自动路由 可访问的控制器和通过 定义路由 可访问的控制器。 
 
 
详情请参阅 自动路由(改进版)。
数据库
- 添加了新的 OCI8 数据库驱动。
- 它可以访问 Oracle 数据库并支持 SQL 和 PL/SQL 语句。 
 
 
- 原生 SQL 字符串支持
- 添加了表示原生 SQL 字符串的类 - CodeIgniter\Database\RawSql。
- select()、where()、like()、join() 接受 - CodeIgniter\Database\RawSql实例。
- DBForge::addField()支持原生 SQL 字符串作为默认值。请参阅 作为默认值的原始 SQL 字符串。
 
 
- SQLite3 有一个新的配置项 - foreignKeys,用于启用外键约束。
帮助器和函数
- HTML 辅助函数 - script_tag()现在使用- null值以最小化形式编写布尔属性:- <script src="..." defer />。请参阅- script_tag()的示例代码。
- 在 - get_filenames()中添加第 4 个参数- $includeDir。请参阅- get_filenames()。
- 通过 log_message()记录的异常信息现在得到了改进。它现在包括异常发生的文件和行号。它也不再截断消息。
- 日志格式也已更改。如果用户依赖应用中的日志格式,新的日志格式为“<1-based count> <cleaned filepath>(<line>): <class><function><args>” 
 
 
- 通过 
命令
其它
- 在控制器中添加了 - $this->validateData()。请参阅 $this->validateData()。
- 内容安全策略 (CSP) 增强
- 在 - Config\ContentSecurityPolicy中添加了配置- $scriptNonceTag和- $styleNonceTag以自定义 CSP 占位符 (- {csp-script-nonce}和- {csp-style-nonce})
- 在 - Config\ContentSecurityPolicy中添加了配置- $autoNonce以禁用 CSP 占位符替换
- 添加了函数 - csp_script_nonce()和- csp_style_nonce()来获取 nonce 属性
- 详情请参阅 内容安全策略。 
 
 
- 新的 视图装饰器 允许在缓存之前修改生成的 HTML。 
- 添加了验证严格规则。请参阅 传统规则和严格规则。 
- 在 app/Config/Mimes.php 中添加了对 webp 文件的支持。 
- RouteCollection::addRedirect()现在可以使用占位符。详细信息请参阅 重定向路由。
- 调试栏增强
- 调试工具栏现在使用 - microtime()而不是- time()。
 
 
- 添加了 预加载 的示例文件。请参阅 preload.php。 
变更
- 将最低 PHP 要求更新为 7.4。 
- 为了使默认配置更安全,默认情况下关闭了自动路由。 
- 验证。当使用带通配符 (*) 的字段时,更改了错误生成方式。现在错误键包含完整路径。请参阅 获取所有错误。 
- 当使用通配符时, - Validation::getError()将返回匹配掩码的所有找到的错误字符串。
- 当前版本的内容安全策略(CSP)为脚本和样式标签输出一个 nonce。以前的版本为每个标签输出一个 nonce。 
- 发送 cookie 的过程已移动到 - Response类中。现在- Session类不再发送 cookie,而是将它们设置到 Response 中。
弃用功能
- 弃用 - CodeIgniter\Database\SQLSRV\Connection::getError()。请使用- CodeIgniter\Database\SQLSRV\Connection::error()。
- 弃用 - CodeIgniter\Debug\Exceptions::cleanPath()和- CodeIgniter\Debug\Toolbar\Collectors\BaseCollector::cleanPath()。请使用- clean_path()函数。
- 弃用 - CodeIgniter\Log\Logger::cleanFilenames()和- CodeIgniter\Test\TestLogger::cleanup()。请使用- clean_path()函数。
- 弃用 - CodeIgniter\Router\Router::setDefaultController()。
- 在 spark 中弃用常量 - SPARKED。请使用- CodeIgniter\CodeIgniter中的- $context属性。
- 弃用 - CodeIgniter\Autoloader\Autoloader::discoverComposerNamespaces(),不再使用。
- 弃用常量 - EVENT_PRIORITY_LOW、- EVENT_PRIORITY_NORMAL和- EVENT_PRIORITY_HIGH。请使用类常量- CodeIgniter\Events\Events::PRIORITY_LOW、- CodeIgniter\Events\Events::PRIORITY_NORMAL和- CodeIgniter\Events\Events::PRIORITY_HIGH。
错误修复
- SQLSRV 驱动程序忽略配置中的端口值。 
有关完整的错误修复列表,请参阅仓库的 CHANGELOG_4.2.md。