从 4.1.4 升级到 4.1.5

请参阅与安装方法相对应的升级说明。

重大变更

BaseBuilder 和 Model 类中 set() 方法的变更

已移除 $value 参数的强制转换,以修复将参数作为数组和字符串传递给 set() 方法时处理方式不同的错误。如果您自己扩展了 BaseBuilder 类或 Model 类并修改了 set() 方法,则需要将其定义从 public function set($key, ?string $value = '', ?bool $escape = null) 更改为 public function set($key, $value = '', ?bool $escape = null)

会话 DatabaseHandler 的数据库表变更

为了优化,会话表中以下列的类型已经变更。

  • MySQL
    • 时间戳

  • PostgreSQL
    • IP 地址

    • 时间戳

    • 数据

更新会话表的定义。请参阅 会话库 以获取新定义。

此变更已在 v4.1.2 中引入。但由于 一个错误,DatabaseHandler 驱动程序无法正常工作。

CSRF 保护

由于错误修复,现在 CSRF 保护不仅适用于 POST,还适用于应用了 CSRF 过滤器的 PUT/PATCH/DELETE 请求。

使用 PUT/PATCH/DELETE 请求时,您需要发送 CSRF 令牌。或者,如果您不需要对这些请求进行 CSRF 保护,请移除这些请求的 CSRF 过滤器。

如果您希望与上一个版本保持相同行为,请在 app/Config/Filters.php 中像下面这样设置 CSRF 过滤器

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Filters extends BaseConfig
{
    // ...

    public $methods = [
        'get'  => ['csrf'],
        'post' => ['csrf'],
    ];
    // ...
}

仅当您使用 form_open() 自动生成 CSRF 字段时,才需要保护 GET 方法。

警告

通常,如果您使用 $methods 过滤器,您应该 禁用自动路由(旧版),因为 自动路由(旧版) 允许任何 HTTP 方法访问控制器。使用您未预料到的方法访问控制器可能会绕过过滤器。

CURLRequest 头部变更

在之前的版本中,如果您没有提供自己的头部,CURLRequest 会发送来自浏览器的请求头部。该错误已修复。如果您的请求依赖于头部,您的请求在升级后可能会失败。在这种情况下,请手动添加必要的头部。请参阅 CURLRequest 类 以了解如何添加。

查询生成器变更

为了优化和修复错误,以下行为(主要用于测试)已变更。

  • 当您使用 insertBatch()updateBatch() 时,$query->getOriginalQuery() 的返回值已经变更。它不再返回带有绑定参数的查询,而是返回实际运行的查询。

  • 如果 testModetrueinsertBatch() 将返回一个 SQL 字符串数组,而不是受影响的行数。进行此变更的目的是使返回的数据类型与 updateBatch() 方法相同。

破坏性增强

路由的多重筛选器

为路由设置多重筛选器的新功能。

重要

此功能默认禁用。因为它破坏了向后兼容性。

如果您想使用此功能,您需要在 app/Config/Feature.php 中将属性 $multipleFilters 设置为 true。如果您启用它

  • CodeIgniter\CodeIgniter::handleRequest() 使用
    • CodeIgniter\Filters\Filters::enableFilters(),而不是 enableFilter()

  • CodeIgniter\CodeIgniter::tryToRouteIt() 使用
    • CodeIgniter\Router\Router::getFilters(),而不是 getFilter()

  • CodeIgniter\Router\Router::handle() 使用
    • 属性 $filtersInfo,而不是 $filterInfo

    • CodeIgniter\Router\RouteCollection::getFiltersForRoute(),而不是 getFilterForRoute()

如果您扩展了上述类,那么您需要更改它们。

以下方法和属性已弃用

  • CodeIgniter\Filters\Filters::enableFilter()

  • CodeIgniter\Router\Router::getFilter()

  • CodeIgniter\Router\RouteCollection::getFilterForRoute()

  • CodeIgniter\Router\RouteCollection 的属性 $filterInfo

有关此功能,请参见 应用筛选器

项目文件

项目空间(根目录、应用程序、公共、可写)中的众多文件已收到更新。由于这些文件在系统范围之外,未经您的干预,它们将不会更改。有一些第三方 CodeIgniter 模块可用于协助将更改合并到项目空间:在 Packagist 上浏览

注意

除了极少数的错误修复,对项目空间的文件所做的任何更改都不会破坏您的应用程序。此处记录的所有更改在下一个主要版本发布之前都是可选的,任何强制性更改都将在上述部分中介绍。

内容更改

以下文件进行了重大更改(包括弃用或视觉调整),建议您将更新后的版本与您的应用程序合并

  • app/Config/CURLRequest.php

  • app/Config/Cache.php

  • app/Config/Feature.php

  • app/Config/Generators.php

  • app/Config/Publisher.php

  • app/Config/Security.php

  • app/Views/welcome_message.php

所有更改

这是项目空间中收到更改的所有文件的列表;许多将是简单的注释或格式,对运行时没有影响

  • app/Config/CURLRequest.php

  • app/Config/Cache.php

  • app/Config/Feature.php

  • app/Config/Generators.php

  • app/Config/Kint.php

  • app/Config/Publisher.php

  • app/Config/Security.php

  • app/Views/welcome_message.php