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 中的欢迎消息。
- 您现在可以为 JsonView 和 XmlView 将 _serialized 设置为 true,以序列化所有视图变量,而不是显式指定它们。
- 添加了 Time::fromNow()。此方法使计算与“现在”的差异变得更容易。
- Time::i18nFormat() 现在在格式化日期时支持非格里高利历法。