从 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.php
app/Config/Autoload.php
app/Config/Cookie.php
app/Config/Events.php
app/Config/Exceptions.php
app/Config/Security.php
app/Views/errors/html/*
env
spark
所有更改
这是项目空间中收到更改的所有文件的列表;许多文件将是简单的注释或格式,不会对运行时产生影响
app/Config/App.php
app/Config/Autoload.php
app/Config/ContentSecurityPolicy.php
app/Config/Cookie.php
app/Config/Events.php
app/Config/Exceptions.php
app/Config/Logger.php
app/Config/Mimes.php
app/Config/Modules.php
app/Config/Security.php
app/Controllers/BaseController.php
app/Views/errors/html/debug.css
app/Views/errors/html/error_404.php
app/Views/errors/html/error_exception.php
app/Views/welcome_message.php
composer.json
contributing/guidelines.rst
env
phpstan.neon.dist
phpunit.xml.dist
public/.htaccess
public/index.php
rector.php
spark