版本 4.7.1

发布日期:2026 年 3 月 22 日

CodeIgniter4 的 4.7.1 版本发布

重大变更

  • 数据库: CodeIgniter\Database\SQLite3\Connection::$busyTimeout 的类型现已定义为 ?int。重写了该属性的自定义子类需要进行相应更新。

消息变更

  • 已更新 Images.unsupportedImageCreate

  • Validation.valid_cc_num 键名更名为 Validation.valid_cc_number

变更

Events

  • Worker 模式: Events::cleanupForWorkerMode() 现可接受可选的数组参数 $resetEventListeners,该参数与 Config\WorkerMode 中新增的 $resetEventListeners 属性对应。如果在事件回调中注册了监听器,通过此参数可声明需要在请求之间清理的事件名称。参见 重置事件监听器

其他

  • builds:builds 脚本(用于 codeigniter4/appstarter)中新增了 next 参数,用于将 4.7.x 切换至下一个次要版本 4.8.x-dev。参见 最新开发版

Bug 修复

  • ContentSecurityPolicy: 修复了禁用 CSP 时,生成的 HTML 未能移除自定义 CSP 标签的问题。该方法现可确保移除生成 HTML 中的所有自定义 CSP 标签。

  • ContentSecurityPolicy: 修复了 generateNonces() 因使用未转义的双引号替换 CSP nonce 占位符而导致 JSON 响应损坏的问题。当响应的 Content-Type 为 JSON 时,该方法现会自动对 nonce 属性进行 JSON 转义。

  • ContentSecurityPolicy: 修复了 getScriptNonce()getStyleNonce() 生成的 nonce 未添加到 script-src-elemstyle-src-elem 指令的问题,这曾导致浏览器在存在这些指令时静默忽略 nonce。

  • CURLRequest: 修复了无法正确解析缺少原因短语的 HTTP/2 响应(例如 HTTP/2 200)的问题,曾导致状态码和协议版本被忽略。

  • Database: 修复了 BaseConnection::callFunction() 可能会对已带前缀的函数名重复添加前缀的问题。

  • Database: 修复了 BasePreparedQuery::prepare() 因过度匹配命名占位符而导致带冒号语法的 SQL 处理错误的问题。现已保留 PostgreSQL 的类型转换语法(如 ::timestamp)。

  • Database: 修复了配置数组中的字符串值(包括 .env 覆盖项)未针对类型化连接属性进行规范化的问题,这曾导致 SQLite3 的 synchronousbusyTimeout 等选项被赋予错误类型。

  • Model: 修复了当 updateOnlyChangedtrue 且索引字段值未改变时,BaseModel::updateBatch() 抛出异常的问题。

  • Model: 修复了 Model::chunk() 在迭代结束时运行多余数据库查询的问题。此外,若调用 chunk() 时传入非正数的块大小,现会抛出 InvalidArgumentException

  • Session: 修复了 MemcachedHandler 构造函数在 savePath 不为空时错误抛出异常的问题。

  • Testing: 修复了 FeatureTestTrait::withRoutes() 未能正确验证无效 HTTP 方法,导致将其全部传递给 RouteCollection 的问题。

  • Toolbar: 修复了通过 ?debugbar_time=... 加载的独立工具栏页面无法交互的问题。

  • Toolbar: 修复了路由面板在悬停时仅将第一个路由参数转换为输入框的问题。

  • Validation: 验证规则 valid_cc_number 现已具备正确的翻译。

  • Validation: 修复了在使用通配符字段(如 contacts.friends.*.name)时,规则未能对缺少键名的数组元素生效的问题。

  • View: 修复了未定义 appOverridesFolder 配置属性时 View 会抛出错误的问题。

请查看仓库的 CHANGELOG.md 以获取完整的 Bug 修复列表。