CakePHP 2.3.0 发布!

CakePHP 核心团队很自豪地宣布 CakePHP 2.3.0 和 2.2.6[1] 的正式发布。从 2.3.0-RC2 发布以来,我们做了一些小的改进和修复。

CakePHP 核心团队很自豪地宣布 CakePHP 2.3.0 和 2.2.6[1] 的正式发布。从 2.3.0-RC2 发布以来,我们做了一些小的改进和修复。

CakePHP 2.3 现在被标记为稳定版本

2.3.0 是一个全新的版本,与 2.2.5 之前的版本完全兼容。如果您在阅读完此公告后迫不及待地想要升级项目,请确保您阅读了手册中的迁移指南[2],因为可能存在一些需要您修改应用程序才能适配的更改。

以下是本版本更新的一些简要概览。

授权

AuthComponent 进行了改进,现在更容易实现无状态的授权机制,该机制将以适当的错误代码进行响应,而不是在访问权限不足时重定向。新增了 `AuthComponent::$unauthorizedRedirect` 属性,用于在运行时控制此行为,可以根据需要将其设置为 false 或 URL。

为了提高安全性,我们添加了一个新的 Blowfish 适配器,它将使用 Blowfish/bcrypt 对您的密码进行哈希运算。

此外,我们已弃用 `AuthComponent::redirect()`,转而使用 `AuthComponent::redirectUrl`,以便更好地反映该方法的功能。

分页

如果您想在分页调用中使用自定义查找方法,现在更方便了。只需在分页设置数组中设置 `findType` 键,就可以使用!

我们还决定在任何用户尝试访问超出范围的页面时返回 NotFoundException 错误,而不是提供一个不存在的页面或第一个页面,这是之前的行为。

现在,在分页设置数组中手动将 `limit` 设置为大于 maxLimit 的值,实际上将 maxLimit 设置为相同的值,无需重复操作。

自定义视图类

不喜欢内置的内容类型视图实现?需要对其进行扩展?现在比以往更容易!只需使用 `RequestHandlerComponent::viewClassMap()` 设置视图类名,或直接在 RequestHandlerComponent 的设置数组中设置映射。

我们 <3 PHP 5.4

是的,我们仍然支持 5.2。但这并没有阻止我们发布一个用于快速开发的创建独立 PHP 服务器的命令行工具。只需使用 `Console/cakeserver` 启动它。

配置您的应用

配置引擎现在能够将其内部状态存储到它们可以理解的格式。添加了 `ConfigReaderInterface::dump()` 和 IniReader 引擎的相应实现。如果您需要持久化动态生成的配置,或者您想要实现一个在数据库中存储的自定义配置引擎,这将非常有用。

关于 CakePlugin::loadAll() 的一个常见问题是它没有检查插件中的引导文件是否真正存在。这使得像 CMS 这样的应用程序难以一次性加载所有扩展。虽然我们仍然认为每个插件都应该使用正确的设置加载,但我们在插件配置数组中添加了一个新的 `ignoreMissing` 键。`CakePlugin::loadAll(array('ro utes' => true, 'bootstrap' => true, 'ignoreMissing' => true))` 将加载所有插件,并且不会因为缺少 routes.php 或 bootstrap.php 文件而报错。

网络和邮件

就像您可以使用点表示法使用 `request->data('key')` 读取发布的数据一样,现在您也可以使用 `request->query('key')` 对查询字符串进行相同的操作。

经过一番思考,我们决定弃用 MediaView。它所有的代码现在都位于 CakeResponse::file() 中,这使得直接将文件发送到浏览器成为了一行代码,无论是流式传输还是将其设置为下载。

我们在 CakeSocket 中添加了对 TLS 连接的支持,这使得通过 SMTP + TLS 协议发送电子邮件成为可能。此外,现在可以使用 `contentDisposition` 选项为使用 CakeEmail 发送的附件设置 Content-Disposition 标头。

作为一个小的但很重要的变化,HttpResponse 已被弃用,它所有的代码都位于新的类 HttpSocketResponse 中。

视图和助手

视图类再次进行了改进,延续了我们自 2.1 以来一直努力的方向。其中一项更改是让 `View::fetch()` 在请求的块为空时有一个默认文本。此外,添加了 `View::prepend` 方便方法,用于将文本追加到任何现有的块。如果您想在块已存在的情况下才执行某些代码,那么新的 `View::startIfEmpty()` 可能就是您要找的。

如果您无法提前知道元素文件是否存在,那么 2.3 现在是您的选择。我们引入了 `View::elementExists()`,并在 `View::element()` 中添加了 `ignoreMissing` 选项,以抑制缺少元素的错误。

另一个简单但重要的变化:我们的默认布局使用 HTML5 作为文档类型。我们这样做是因为现在 FormHelper 将在您的字段中添加 `required` 属性。

FormHelper 变得更加智能,它现在可以为电话和电子邮件字段选择正确的输入类型。此外,现在可以在 `FormHelper::postLink()` 中使用任何 HTTP 动词。

PaginatorHelper 获得了一些期待已久的新功能。

  • `PaginatorHelper::numbers()` 现在有一个新的选项 currentTag,允许指定用于包装当前页码的额外标签。
  • 对于 `PaginatorHelper::prev()` 和 `PaginatorHelper::next()`,现在可以将 tag 选项设置为 false 以禁用包装器。此外,这两个方法还添加了一个新的选项 disabledTag。

最后,助手获得了 $settings 属性,该属性将使用控制器中指定的任何数组进行设置。

缓存

  • File Engine 现在是默认的缓存引擎,这解决了很多人没有安装 APC 或忘记在同一服务器上拥有多个应用程序时更改缓存前缀的问题。
  • 现在终于可以拥有不同的全页面缓存,例如每个子域一个缓存。这是通过缓存配置中的新 viewPrefix 设置实现的。`Configure::write('Cache.viewPrefix', 'YOURPREFIX');`

模型

重要:`Model::find('first')` 现在在没有找到记录时将返回一个空数组。请确保更新您的测试!

  • 添加了对 bigint 数据类型和 MySQL FULLTEXT 索引的支持。
  • `Validation::fileSize()` 已添加。

在测试模型或控制器时,现在可以使用 `CakeTestCase::getMockForModel()` 快速生成模型模拟,这些模拟将具有正确的别名、表名,并在 ClassRegistry 中正确注册。

从 2.3.0-RC2 开始,以下部分进行了更改

  • 将 AuthComponent::redirect() 重命名为 AuthComponent::redirectUrl()。
  • 添加了“tel”和“email”输入类型猜测。
  • 用于在渲染时构造 View 对象的 Controller::_getViewObject() 方法。
  • 不要为复选框设置“required”属性(除非显式指定)。
  • 从 core.php 中删除了 Security.level。
  • 在默认主页上显示精确的 PDO 错误。
  • 允许 AuthComponent::$unauthorizedRedirect 为 URL。
  • 添加了忽略 CakePlugin 的包含错误的功能。
  • 允许单选按钮的 `between` 选项为字符串数组。

有关 2.3.0 中所有更改的完整列表,请参阅变更日志[3]。

2.2.x 分支的更改

  • 确保在销毁会话之前启动会话。
  • 一致地对主题名称进行词形转换,这意味着每个主题都应该以大写字母开头,就像其他文件夹一样。
  • 将 OK 或成功 HTTP 代码 200-206 添加到 HttpResponse::isOK()。修复了 #3531。
  • 仅为存在的表烘焙 HABTM 关联。
  • 为烘焙控制器 all 添加了对 –admin 的支持。
  • 修复了获取 XML 文件时进行重定向的方式。
  • 修复了将 Token 字段添加到 GET 表单的问题。
  • 允许 afterFind() 完全删除关联记录。通过返回 array() 或取消设置第 0 个结果,afterFind 回调应该能够完全从结果中删除数据。

变更日志[4] 包含了 2.2.5 中所有更改的完整列表。

对所有参与者表示衷心的感谢,包括通过提交、工单、文档编辑以及其他方式为框架做出贡献的人。没有您,就没有 CakePHP。

下载打包版本[1]