CakePHP 3.0.0 开发预览版 2 发布
CakePHP 核心团队非常高兴地宣布 CakePHP 3.0 的第二个开发预览版
CakePHP 核心团队很高兴地宣布 CakePHP 3.0.0[1] 的第二个开发预览版。在 3.0.0-dev1 发布后的几个月里,我们一直在努力整合社区对 ORM 的反馈,并构建了第一个开发预览版中缺少的一些功能。
3.0.0-dev2 中的新功能
- CakePHP 已采用 PSR-4 自动加载器标准。如果您正在更新,请确保使用 `composer self-update` 更新 composer。
- 由于 PSR-4,CakePHP 和 App 骨架的目录结构都简化了一些。
- AclComponent 已被移除 - 它将作为插件返回。
- TestShell 和 webrunner 已被移除,取而代之的是仅从 CLI 和 VisualPHPUnit 支持 phpunit。
- 视图模板已从 View/ 移动到 Template/。这样做是为了让 View/ 目录只包含视图类和辅助函数。
- HtmlHelper、FormHelper 和 SessionHelper 一致地使用字符串模板。
- ID 属性现在始终使用 `-` 生成,而不是 CamelCase。这样做是为了在 CSS 选择器中使用一种约定。
- API 文档和手册已经增加了许多新部分和改进。
- Scaffold 已被移除。通过 CRUD 插件[2] 可以使用改进的动态脚手架,该插件已经与 3.0 兼容,并且消除了控制器中执行的大部分重复性任务。
- UpgradeShell 已移入一个单独的插件。
- 对一些复杂对象(如实体、表和查询)提供了更好的调试输出。还添加了一种特殊方法来控制使用 debug() 函数时对象的输出数据。
- 添加了 Collection::insert()
FormHelper
FormHelper 从头开始重新构建。它具有一个新的可扩展小部件系统。表单小部件允许您构建自包含的输入小部件。这使得定义复杂的小部件(如应用程序或插件代码中的 datetime 小部件)变得很容易。创建后,小部件可以与其他 FormHelper 功能(如 `input()`)组合使用。
FormHelper 现在也与新的 ORM 配合使用。您可以为单个实体或实体集合创建表单。
`
//Createaformforasingleentity&itsassociations
echo$this->Form->create($article);
//Createaformformultipleentities&theirassociations.
echo$this->Form->create($articles);
`
FormHelper 还具有一个可插拔的上下文系统,允许您将 FormHelper 与您可能希望使用的任何 ORM 集成。
TranslateBehavior
TranslateBehavior 已从头开始重新构建。它具有期待已久的从 find() 中翻译所有模型(包括关联)的能力。新的 `TranslateTrait` 使处理实体中的多个翻译变得简单。
ORM 改进
我们继续在 ORM 中构建功能。dev2 中的一些显着改进是
- 复合主键支持 - ORM 现在支持所有关联中的复合主键。
- Model.beforefind 事件现在在同一查询中触发所有关联。
- 热切加载现在与 Query 类分离。这使得实现自定义热切加载变得容易得多。
- Model/Repository 已重命名为 Model/Table。许多人发现“Repository”是一个令人困惑和陌生的术语。
- 接口已被提取,以减少对具体实现的依赖。
- 添加了 formatResults() 方法,以提供 afterFind() 过去所做的大部分功能。
- 添加了 Query::counter(),以提供对复杂计数逻辑的支持。这使得在 PaginatorComponent 中覆盖计数变得更容易。
- 添加了 Table::patchEntity(),它使您能够将 requet 表单数据合并到现有实体及其关联中。
下一步
我们的下一个版本将是另一个开发预览版。在 dev3 版本中,我们将重点关注更新
- Bake 和所有相关任务需要更新以与新的 ORM 配合使用。
- 更新 i18n 提取任务以从 Table 对象中提取验证消息。
- 添加对 SQLServer 的支持。由于数据库层相当稳定,添加 SQLServer 将帮助 Windows 上的开发人员。
有关 3.0.0 中所有更改的更多详细信息,您可以查阅迁移指南[2]。我要感谢所有为 3.0 做出贡献想法、代码、文档或反馈的人。它将成为该项目的一个重要里程碑,我们才刚刚开始将其打造为有史以来最好的 CakePHP 版本。