从 4.1.1 升级到 4.1.2
请参阅与安装方法相对应的升级说明。
重大变更
current_url() 和 indexPage
由于 current_url() 中的 错误,生成的 URI 可能与项目的配置不符,最重要的是: indexPage 将不包含在内。使用 App::$indexPage 的项目应预期 current_url() 及其所有依赖项(包括响应测试、分页器、表单助手、分页器和视图解析器)的值发生更改。相应地更新您的项目。
缓存键
缓存处理程序对键的兼容性差异很大。更新后的缓存驱动程序现在通过验证传递所有键,大致符合 PSR-6 的建议
唯一标识缓存项的至少包含一个字符的字符串。实现库必须支持由 UTF-8 编码中的字符 A-Z、a-z、0-9、_ 和 . 按照任何顺序组成的键,且长度最长为 64 个字符。实现库可能支持其他字符和编码或更长的长度,但必须至少支持该最小值。库负责根据需要对键字符串进行自己的转义,但必须能够返回原始未修改的键字符串。以下字符保留给未来扩展,实现库不得支持:
{}()/\@:
更新您的项目以删除任何无效的缓存键。
BaseConnection::query() 返回值
早期版本中的 BaseConnection::query() 方法即使查询失败也会错误地返回 BaseResult 对象。此方法现在将为失败的查询返回 false(或在 DBDebug 为 true 时引发异常),并将为写入类型查询返回布尔值。查看 query() 方法的任何用法,并评估该值可能是布尔值而不是 Result 对象。要更好地了解哪些查询是写入类型查询,请检查 BaseConnection::isWriteType() 和相关连接类中的任何特定于 DBMS 的覆盖 isWriteType()。
重大增强
已添加 ConnectionInterface::isWriteType() 声明
如果您编写了任何实现 ConnectionInterface 的类,那么这些类现在必须实现 isWriteType() 方法,声明为 public function isWriteType($sql): bool。如果您的类扩展了 BaseConnection,那么该类将提供一个基本的 isWriteType() 方法,您可能希望覆盖该方法。
测试特性
CodeIgniter\Test 命名空间进行了重大改进,以帮助开发人员进行自己的测试用例。最值得注意的是,测试扩展已移至特性,以便根据各种测试用例需求更轻松地进行挑选和选择。CIDatabaseTestCase 和 FeatureTestCase 类已被弃用,其方法分别移至 DatabaseTestTrait 和 FeatureTestTrait。更新您的测试用例以扩展主测试用例并使用您需要的任何特性。例如
<?php
use CodeIgniter\Test\DatabaseTestCase;
class MyDatabaseTest extends DatabaseTestCase
{
public function testBadRow()
{
// ...
}
}
… 变为
<?php
use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Test\DatabaseTestTrait;
class MyDatabaseTest extends CIUnitTestCase
{
use DatabaseTestTrait;
public function testBadRow()
{
// ...
}
}
最后,ControllerTester 已被 ControllerTestTrait 取代,以标准化方法并利用更新的响应测试(如下)。
测试响应
用于测试响应的工具已得到整合和改进。新的 TestResponse 用 ControllerResponse 和 FeatureResponse 替换,其中包含从这两个类中预期的完整方法和属性集。在大多数情况下,这些更改将由 ControllerTestTrait 和 FeatureTestCase “幕后”进行,但需要注意以下两项更改
TestResponse的$request和$response属性受保护,只能通过其 getter 方法request()和response()访问TestResponse没有getBody()和setBody()方法,而是直接使用 Response 方法,例如:$body = $result->response()->getBody();
项目文件
项目空间(根目录、应用程序、公共、可写)中的众多文件已收到更新。由于这些文件位于系统范围之外,因此在您不干预的情况下,它们不会被更改。有一些第三方 CodeIgniter 模块可用于协助合并对项目空间的更改:在 Packagist 上浏览。
注意
除了极少数情况下用于修复错误之外,对项目空间文件所做的任何更改都不会破坏您的应用程序。此处记录的所有更改在下一个主要版本发布之前都是可选的,任何强制性更改都将在上述部分中介绍。
内容更改
以下文件已收到重大更改(包括弃用或视觉调整),建议您将更新版本与您的应用程序合并
app/Config/App.phpapp/Config/Autoload.phpapp/Config/Cookie.phpapp/Config/Events.phpapp/Config/Exceptions.phpapp/Config/Security.phpapp/Views/errors/html/*envspark
所有更改
这是项目空间中收到更改的所有文件的列表;许多文件将是简单的注释或格式,不会对运行时产生影响
app/Config/App.phpapp/Config/Autoload.phpapp/Config/ContentSecurityPolicy.phpapp/Config/Cookie.phpapp/Config/Events.phpapp/Config/Exceptions.phpapp/Config/Logger.phpapp/Config/Mimes.phpapp/Config/Modules.phpapp/Config/Security.phpapp/Controllers/BaseController.phpapp/Views/errors/html/debug.cssapp/Views/errors/html/error_404.phpapp/Views/errors/html/error_exception.phpapp/Views/welcome_message.phpcomposer.jsoncontributing/guidelines.rstenvphpstan.neon.distphpunit.xml.distpublic/.htaccesspublic/index.phprector.phpspark