# 版本 4.1.5

发布日期：2021 年 11 月 8 日

CodeIgniter4 的 4.1.5 版本发布

## 不兼容变更

- 修复了 CSRF 保护上的一个错误。现在,当应用 CSRF 过滤器时,CSRF 保护也适用于 PUT/PATCH/DELETE 请求。如果使用这些请求,则需要发送 CSRF token。

- 在以前的版本中,如果你没有提供自己的 headers, `CURLRequest` 会由于一个错误而发送来自浏览器的请求头。从本版本开始,它不再发送它们。

- 修复了 `BaseBuilder::insertBatch()` 在 `testMode` 下的返回值。现在它返回 SQL 字符串数组而不是受影响的行数。此更改是为了与批处理方法的返回类型保持兼容。现在 `BaseBuilder::insertBatch()` 的返回数据类型与 updateBatch() 方法相同。

- 对 `BaseBuilder::insertBatch()` 和 `BaseBuilder::updateBatch()` 方法中数据处理方式进行了重大优化。这减少了内存使用量和更快的查询处理速度。作为权衡, `$query->getOriginalQuery()` 方法生成的结果发生了变化。它不再返回带有绑定参数的查询,而是实际运行的查询。

## 增强功能

- 为保留字符添加了缓存配置

- `Forge` 类的 addForeignKey() 函数现在可以在数组中定义复合外键

- `Forge` 类的 `dropKey` 函数可以移除键

- 现在环境变量中可以使用 `_` 作为分隔符。参见 命名空间分隔符。

- 为路由添加了多个过滤器和类名过滤器

- 减少了 `insertBatch()` 和 `updateBatch()` 的内存使用量

- 添加了 基于会话的 CSRF 保护

- 为 `Validation` 添加了 `valid_url_strict` 规则

- 调试工具栏

    - 在时间线中添加了格式化的查询字符串

    - 改进了查询字符串的关键字高亮和转义

## 变更

- 始终在 `BaseBuilder` 的 `set`、`setUpdateBatch` 和 `insertBatch` 函数中转义标识符。

## 弃用功能

- 弃用 `CodeIgniter\\Cache\\Handlers\\BaseHandler::RESERVED_CHARACTERS`,改用新的配置属性

## Bug 修复

有关完整的 Bug 修复列表，请参阅仓库的 CHANGELOG_4.1.md。