CakePHP 3.1.0-beta 发布

CakePHP 核心团队很高兴宣布 CakePHP 3.1.0-beta 立即可用。此版本是 3.1 分支的第一个版本,它为 3.x 系列添加了几个新功能。我们希望您能提供有关新功能的任何反馈,以便在 API 定义稳定之前进行调整。

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]);

邮件器

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

模板中的其他模板变量

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

// 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 提供了进度和表格助手,您可以使用它们来使您的 CLI 工具看起来更好。

与 3.0 的重要更改

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

  • FlashComponent 现在使用 set()__call() 方法设置时,会将闪存消息堆叠起来。这意味着存储在会话中的闪存消息的结构已更改。

  • 添加了新的配置 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

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

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

    您应该使用相同名称的方法在视图上设置这些属性,而不是在控制器上设置它们。

其他增强功能

  • 默认路由类已在 cakephp/app 存储库中更改为 DashedRoute。您的当前代码库不受此影响,但建议您从现在开始使用此路由类。
  • 添加了 breakpoint() 助手函数。此函数提供一个代码片段,可以放入 eval() 中以触发交互式控制台。
  • Shell::dispatchShell() 不再输出从调度 shell 中的欢迎消息。
  • 您现在可以为 JsonViewXmlView_serialized 设置为 true,以序列化所有视图变量,而不是显式指定它们。
  • 添加了 Time::fromNow()。此方法使计算与“现在”的差异变得更容易。
  • Time::i18nFormat() 现在在格式化日期时支持非格里高利历法。

弃用

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

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

除非 3.1.0-beta 版本存在重大问题,否则我们将在 4-5 周内发布候选版本和稳定版本。3.1.0 的文档现在可在 手册API 中获得。

与往常一样,衷心感谢所有帮助发布此版本的社区成员,他们报告了问题并发送了拉取请求。

github 上下载打包的版本.