CakePHP 3.1.0 发布

CakePHP 核心团队很高兴地宣布 CakePHP 3.1.0 现已正式发布。此版本是 3.1 的 API 稳定版本。3.1 为 3.x 版本系列带来了许多改进。

3.1 中的新功能

ORM 增强功能

3.1 的一个重要部分是使 ORM 比以前更强大。

延迟急切加载

你现在可以延迟急切加载关联。此功能允许你将额外的关联条件加载到结果集中,实体或实体集合中。

$articles = $this->Articles->find('popular')->all();

// Later on after some logic has run.
// We can load additional associations.
$withAuthors = $this->Articles->loadInto($articles, ['Authors']);

额外的过滤方法

你可能已经在查询对象上使用过 matching()。在 3.1 中,你还可以使用 notMatching() 创建一个否定匹配查询。

// Find articles with no comments.
$query = $this->Articles->find('popular')
    ->notMatching('Comments');

你可以使用 leftJoinWith()innerJoinWith() 方法连接关联,而无需从这些关联中加载列。这使得对关联进行过滤变得容易。

$query = $this->Articles->find()
    ->innerJoinWith('Authors')
    ->where(['Authors.promoted' => true]);

邮件器

邮件器允许你在整个应用程序中创建可重复使用的电子邮件。它们还可以用于在一个位置包含多个电子邮件配置。这有助于使你的代码更简洁,并将电子邮件配置噪音从应用程序的其他区域中排除。有关更多信息,请参阅 邮件器文档

模板中的附加模板变量

你现在可以在应用程序模板中添加额外的模板占位符,然后在生成输入时填充这些占位符。

// Add a template with the help placeholder.
$this->Form->templates([
    'inputContainer' => '<div class="input {{type}}{{required}}">
        {{content}} <span class="help">{{help}}</span></div>'
]);

// Generate an input and populate the help variable
echo $this->Form->input('password', [
    'templateVars' => ['help' => 'At least 8 characters long.']
]);

Shell 助手

Shell 助手允许你轻松地打包复杂的输出生成代码。Shell 助手可以从任何 shell 或任务中访问和使用。

// Output some data as a table.
$this->helper('table')->output($data);

// Get a helper from a plugin.
$this->helper('Plugin.HelperName')->output($data);

你也可以获得助手实例并调用它们上的任何公共方法。

// Get and use the Progress Helper.
$progress = $this->helper('Progress');
$progress->increment(10);
$progress->draw();

CakePHP 提供了 Progress 和 Table 助手,你可以使用它们来使你的 CLI 工具看起来更好。

更新的默认应用程序样式

应用程序框架中使用的样式已经简化,并在较小的设备上提供改进的渲染。除了更简洁的视觉效果外,烘焙模板也已更新以创建更简洁的标记。

../../../_images/3-1-bake-screenshot.png

上面的截图让你可以体验一下新的默认样式是什么样子。

与 3.0 的重要变化

虽然以下更改不会修改方法签名,但特定方法的行为与过去略有不同。

  • FlashComponent 现在堆叠使用 set()__call() 方法创建的 Flash 消息。这意味着 Session 中存储的 Flash 消息的结构已发生变化。
  • 添加了新的配置选项 storage。它包含 AuthComponent 用于存储用户记录的存储类名称。默认情况下,使用 SessionStorage。如果使用无状态身份验证器,你应该配置 AuthComponent 以使用 MemoryStorage
  • 你现在还可以配置 AuthComponent 在控制器 beforeFilter() 回调运行之前执行身份验证检查,方法是使用 checkAuthIn 配置。当使用无状态身份验证器时,这特别有用。
  • RequestHandlerComponent 现在根据 beforeRender() 回调中的解析扩展名或 Accept-Type 标头切换布局和模板,而不是 startup() 回调。
  • HttpClient 中发送请求时使用的默认 MIME 类型已更改。以前,始终使用 multipart/form-data。在 3.1 中,只有在存在文件上传时才使用 multipart/form-data。当没有文件上传时,使用 application/x-www-form-urlencoded

其他增强功能

  • 默认路由类已在 cakephp/app 存储库中更改为 DashedRoute。你的当前代码库不受此影响,但建议从现在开始使用此路由类。
  • 添加了 breakpoint() 助手函数。此函数提供了一段代码,可以将其放入 eval() 中以触发交互式控制台。
  • Shell::dispatchShell() 不再输出来自已分派 shell 的欢迎消息。
  • 你现在可以将 _serialized 设置为 true,以便 JsonViewXmlView 序列化所有视图变量,而不是显式指定它们。
  • 添加了 Time::fromNow()。此方法使计算与“现在”的差异变得更容易。
  • Time::i18nFormat() 现在支持非格里高利历在格式化日期时使用。
  • 添加了 Validation::latitude()Validation::longitude()
  • 添加了 Validation::ascii()Validation::utf8()Validation::isInteger()
  • 从 2.x 移植了 Cache::add()。此方法允许你将数据原子地添加到缓存后端,前提是键不存在。
  • Time::listTimezones() 现在支持用于显示时区缩写的选项。
  • Hash::get() 现在支持实现 ArrayAccess 的对象。
  • Hash::sort() 通过新的 ignoreCase 选项支持不区分大小写的排序。

弃用

随着我们不断改进 CakePHP,某些功能被弃用,因为它们被更好的解决方案所取代。弃用功能将在 4.0 之前不会被删除。

  • SessionHelper 已被弃用。你可以直接使用 $this->request->session()

  • 以下控制器属性现在已被弃用。

    • layout
    • view
    • theme
    • autoLayout
    • viewPath
    • layoutPath

    不要在你的控制器上设置这些属性,而应该使用 ViewBuilder 设置它们。

3.1 迁移指南 包含 3.1.0 中所有更改的完整列表,建议那些考虑升级的人阅读。

升级你的应用程序

你可以使用 composer 从 3.0 升级到 3.1。

php composer.phar require 'cakephp/cakephp:3.1.*' 'cakephp/debug_kit:3.2.*' 'cakephp/bake:1.1.*'

这将安装新的核心库,更新 bake 和 DebugKit。然后,你应该解决应用程序中的任何弃用警告,因为弃用功能将在将来被删除。如果你使用应用程序框架提供的默认 CSS,你应该在 cakephp/app 中拉取最新的 CSS,因为默认样式和烘焙模板已更新。

与往常一样,感谢所有通过报告问题和发送拉取请求帮助实现此版本发布的社区成员。

下载 GitHub 上的打包版本