版本 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-elem和style-src-elem指令的问题,这曾导致浏览器在存在这些指令时静默忽略 nonce。CURLRequest: 修复了无法正确解析缺少原因短语的 HTTP/2 响应(例如
HTTP/2 200)的问题,曾导致状态码和协议版本被忽略。Database: 修复了
BaseConnection::callFunction()可能会对已带前缀的函数名重复添加前缀的问题。Database: 修复了
BasePreparedQuery::prepare()因过度匹配命名占位符而导致带冒号语法的 SQL 处理错误的问题。现已保留 PostgreSQL 的类型转换语法(如::timestamp)。Database: 修复了配置数组中的字符串值(包括
.env覆盖项)未针对类型化连接属性进行规范化的问题,这曾导致 SQLite3 的synchronous和busyTimeout等选项被赋予错误类型。Model: 修复了当
updateOnlyChanged为true且索引字段值未改变时,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 修复列表。