5.1 迁移指南

5.1.0 版本向后兼容 5.0。它添加了新功能并引入了新的弃用。任何在 5.x 中弃用的功能将在 6.0.0 中删除。

行为变更

  • 连接现在如果配置中存在 readwrite 键,无论值如何,都会创建唯一的读和写驱动程序。

  • FormHelper 不再为同时设置了 required 属性的输入元素生成 aria-required 属性。在这些元素上,aria-required 属性是多余的,并且会生成 HTML 验证警告。如果您在样式或脚本中使用 aria-required 属性,则需要更新您的应用程序。

  • 添加具有重复名称的关联现在将引发异常。如果需要,您可以使用 $table->associations()->has() 有条件地定义关联。

  • 围绕截断和最大长度的文本实用程序和 TextHelper 方法正在使用 UTF-8 字符 ellipsis 而不是 ... 遗留字符。

  • TableSchema::setColumnType() 现在如果指定的列不存在则抛出异常。

  • PluginCollection::addPlugin() 现在如果已经添加了相同名称的插件则抛出异常。

  • TestCase::loadPlugins() 现在将清除所有先前加载的插件。因此,您必须指定任何后续测试所需的全部插件。

  • 使用 groupsCache 配置的哈希算法。任何键都将具有新生成的组前缀哈希,这会导致缓存未命中。考虑增量部署以避免在完全冷缓存上进行操作。

  • FormHelper::getFormProtector() 现在除了以前类型之外还会返回 null。这允许动态视图代码以更少的错误运行,并且不应该影响大多数应用程序。

  • Table::findList()valueSeparator 的默认值现在是单个空格而不是 ;

  • ErrorLogger 现在使用 Psr\Log\LogTrait

  • Database\QueryCompiler::$_orderedUnion 已被删除。

弃用

I18n

  • _cake_core_ 缓存配置键已重命名为 _cake_translations_

邮件器

  • Mailer::setMessage() 已被弃用。它具有不直观的行为并且使用率非常低。

新功能

缓存

  • RedisEngine 现在支持 tls 选项,该选项允许通过 TLS 连接连接到 redis。您可以使用 ssl_cassl_certssl_key 选项来定义 redis 的 TLS 上下文。

命令

  • bin/cake plugin list 已被添加到列出所有可用插件、它们的加载配置和版本。

  • 可选的 Command 参数现在可以具有 default 值。

  • BannerHelper 已被添加。此命令助手可以将文本格式化为带有彩色背景和填充的横幅。

  • ConsoleOutput 中添加了 info.bgwarning.bgerror.bgsuccess.bg 的附加默认样式。

控制台

  • Arguments::getBooleanOption()Arguments::getMultipleOption() 已被添加。

  • Arguments::getArgument() 现在如果提供了未知的参数名称,将引发异常。这有助于防止选项/参数名称混淆。

控制器

  • 组件现在可以使用 DI 容器将依赖项解析并作为构造函数参数提供,就像控制器和命令一样。

核心

  • PluginConfig 已被添加。使用此类来获取所有可用插件、它们的加载配置和版本。

  • 添加了 toStringtoInttoBool 函数。它们为您提供了一种类型安全的方式来转换请求数据或其他输入,并在转换失败时返回 null

  • pathCombine() 已被添加以帮助构建路径,而不必担心重复和尾部斜杠。

  • BaseApplication 以及 BasePlugin 类中添加了一个新的 events 挂钩。此挂钩是为您的应用程序注册全局事件侦听器的推荐方式。请参阅 注册侦听器

数据库

  • 添加了对 pointlinestringpolygongeometry 类型的支持。这些类型在处理地理空间或笛卡尔坐标时很有用。Sqlite 支持在幕后使用文本列,并且缺少将数据作为地理空间值进行操作的功能。

  • SelectQuery::__debugInfo() 现在包括查询所用的连接角色。

  • SelectQuery::intersect()SelectQuery::intersectAll() 已被添加。这些方法允许使用 INTERSECTINTERSECT ALL 连接来表达查询。

  • intersectintersect-allset-operations-order-by 功能添加了新的支持功能。

  • 在 4.x 中存在的无需缓冲即可获取记录的功能已恢复。方法 SelectQuery::enableBufferedResults()SelectQuery::disableBufferedResults()SelectQuery::isBufferedResultsEnabled() 已被重新添加。

数据源

  • RulesChecker::remove()removeCreate()removeUpdate()removeDelete() 方法已添加。 这些方法允许您按名称删除规则。

Http

  • SecurityHeadersMiddleware::setPermissionsPolicy() 已添加。 此方法添加了定义 permissions-policy 标头值的能力。

  • Client 现在在发送请求时发出 HttpClient.beforeSendHttpClient.afterSend 事件。 您可以使用这些事件来执行日志记录、缓存或收集遥测数据。

  • Http\Server::terminate() 已添加。 此方法触发 Server.terminate 事件,该事件可用于在 fastcgi 环境中发送响应后运行逻辑。 在其他环境中,Server.terminate 事件发送响应之前运行。

I18n

  • Number::formatter()currency() 现在接受 roundingMode 选项来覆盖舍入方式。

  • toDatetoDateTime 函数已添加。 它们为您提供了一种类型安全的转换请求数据或其他输入的方法,并在转换失败时返回 null

ORM

  • 在关联查找器查询上设置 preserveKeys 选项。 这可以与 formatResults() 一起使用,将关联查找器结果替换为关联数组。

  • 具有包含 json 的名称的 SQLite 列现在可以映射到 JsonType。 这是一个可选功能,通过在您的应用程序中将 ORM.mapJsonTypeForSqlite 配置值设置为 true 来启用。

TestSuite

  • CakePHP 以及应用程序模板已更新为使用 PHPUnit ^10.5.5 || ^11.1.3"

  • ConnectionHelper 方法现在都是静态的。 此类没有状态,其方法已更新为静态的。

  • LogTestTrait 已添加。 此新特征使您能够轻松地在测试中捕获日志并对日志消息的存在或不存在进行断言。

  • IntegrationTestTrait::replaceRequest() 已添加。

Utility

  • Hash::insert()Hash::remove() 现在接受 ArrayAccess 对象以及 array 数据。

Validation

  • Validation::enum()Validator::enum() 已添加。 这些验证方法简化了验证支持的枚举值。

  • Validation::enumOnly()Validation::enumExcept() 已添加以检查特定情况并进一步简化验证支持的枚举值。

View

  • 视图单元现在在其操作周围发出事件 Cell.beforeActionCell.afterAction

  • NumberHelper::format() 现在接受 roundingMode 选项来覆盖舍入方式。

Helpers

  • TextHelper::autoLinkUrls() 已添加选项,用于更好地打印链接标签:* stripProtocol:从链接开头删除 http://https://。 默认关闭。 * maxLength:链接标签的最大长度。 默认关闭。 * ellipsis:要附加到链接标签末尾的字符串。 默认值为 UTF8 版本。

  • HtmlHelper::meta() 现在可以使用 meta('csrfToken') 创建包含当前 CSRF 令牌的元标记。