从 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()
的返回值已经变更。它不再返回带有绑定参数的查询,而是返回实际运行的查询。如果
testMode
为true
,insertBatch()
将返回一个 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