从 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(或在 DBDebugtrue 时引发异常),并将为写入类型查询返回布尔值。查看 query() 方法的任何用法,并评估该值可能是布尔值而不是 Result 对象。要更好地了解哪些查询是写入类型查询,请检查 BaseConnection::isWriteType() 和相关连接类中的任何特定于 DBMS 的覆盖 isWriteType()

重大增强

已添加 ConnectionInterface::isWriteType() 声明

如果您编写了任何实现 ConnectionInterface 的类,那么这些类现在必须实现 isWriteType() 方法,声明为 public function isWriteType($sql): bool。如果您的类扩展了 BaseConnection,那么该类将提供一个基本的 isWriteType() 方法,您可能希望覆盖该方法。

测试特性

CodeIgniter\Test 命名空间进行了重大改进,以帮助开发人员进行自己的测试用例。最值得注意的是,测试扩展已移至特性,以便根据各种测试用例需求更轻松地进行挑选和选择。CIDatabaseTestCaseFeatureTestCase 类已被弃用,其方法分别移至 DatabaseTestTraitFeatureTestTrait。更新您的测试用例以扩展主测试用例并使用您需要的任何特性。例如

<?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 取代,以标准化方法并利用更新的响应测试(如下)。

测试响应

用于测试响应的工具已得到整合和改进。新的 TestResponseControllerResponseFeatureResponse 替换,其中包含从这两个类中预期的完整方法和属性集。在大多数情况下,这些更改将由 ControllerTestTraitFeatureTestCase “幕后”进行,但需要注意以下两项更改

  • 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