CakePHP 3.2.0 发布

CakePHP 核心团队很高兴宣布 CakePHP 3.2.0 现已发布。这是 3.2 分支的第一个稳定版本。从现在起,3.1 仅会收到安全更新。3.2 与 3.1 和 3.0 向后兼容,并提供新功能和性能改进。

最低要求 PHP 5.5

CakePHP 3.2 至少需要 PHP 5.5.9。通过采用 PHP 5.5,我们可以提供更好的日期和时间库,并消除对密码兼容性库的依赖。

禁用弃用警告

升级后,您可能会遇到多个弃用警告。这些警告是由将在 CakePHP 4.x 中删除的方法、选项和功能发出的,但将在整个 3.x 的生命周期内继续存在。虽然我们建议在遇到弃用问题时解决它们,但这并不总是可行。如果您想推迟修复弃用通知,您可以在您的 config/app.php 中禁用它们

'Error' => [
    'errorLevel' => E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED,
]

以上错误级别将抑制来自 CakePHP 的弃用警告。

Carbon 被 Chronos 取代

Carbon 库已被 cakephp/chronos 取代。这个新库是 Carbon 的一个分支,没有额外的依赖项。它还提供了一个日历日期对象,以及日期和日期时间对象的不可变版本。

新的日期对象

The Date 类允许您将 DATE 列干净地映射到 PHP 对象。日期实例将始终将其时间修正为 00:00:00 UTC。默认情况下,ORM 现在在映射 DATE 列时创建 Date 实例。

新的不可变日期和时间对象

The FrozenTimeFrozenDate 类已添加。这些类提供与 Time 对象相同的 API。冻结类提供了 TimeDate 的不可变变体。通过使用不可变对象,您可以防止意外的变异。而不是就地修改,修改方法会返回新的实例

use Cake\I18n\FrozenTime;

$time = new FrozenTime('2016-01-01 12:23:32');
$newTime = $time->modify('+1 day');

在上面的代码中,$time$newTime 是不同的对象。The $time 对象保留其原始值,而 $newTime 具有修改后的值。从 3.2 开始,ORM 可以将日期/日期时间列映射到不可变对象。

添加 CorsBuilder

为了更轻松地设置与跨域请求 (CORS) 相关的标头,添加了一个新的 CorsBuilder。这个类允许您使用流式接口定义 CORS 相关的标头。

RedirectRoute 在重定向时引发异常

Router::redirect() 现在在达到重定向条件时引发 Cake\Network\Routing\RedirectException。此异常由路由过滤器捕获并转换为响应。这替换了对 response->send() 的调用,并允许调度程序过滤器与重定向响应交互。

ORM 改进

  • 包含相同关联多次现在按预期工作,并且查询构建器函数现在被堆叠。
  • 函数表达式现在正确地转换其结果。这意味着像 $query->func()->current_date() 这样的表达式将返回日期时间实例。
  • 现在可以通过 invalid() 方法在实体中访问验证失败的字段数据。
  • 实体访问器方法查找现在被缓存,并且性能更好。

改进的验证器 API

Validator 对象具有一系列新方法,这些方法使构建验证器变得不那么冗长。例如,将验证规则添加到用户名字段现在可以如下所示

$validator->email('username')
    ->ascii('username')
    ->lengthBetween('username', [4, 8]);

控制台改进

  • Shell::info()Shell::warn()Shell::success() 已添加。这些辅助方法使使用常用的样式变得更简单。
  • Cake\Console\Exception\StopException 已添加。
  • Shell::abort() 已添加以替换 error()

添加 StopException

Shell::_stop()Shell::error() 不再调用 exit()。相反,它们会引发 Cake\Console\Exception\StopException。如果您的外壳/任务正在捕获 \Exception,这些方法将在其中被调用,则需要更新这些捕获块,使其不再捕获 StopException。通过不调用 exit(),测试外壳应该更容易,并且需要更少的模拟。

Helpers initialize()

Helpers 现在可以像其他类类型一样实现一个 initialize(array $config) 钩子方法。

FormHelper

FormHelper::create()action 键已弃用。您应该直接使用 url 键。

致命错误内存限制处理

可以将新的配置选项 Error.extraFatalErrorMemory 设置为遇到致命错误时要增加的内存限制的兆字节数。这使得可以腾出空间来完成日志记录或错误处理。

弃用

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

  • Shell::error() 已弃用,因为它 的名称不能明确地表明它既输出消息又停止执行。请改用 Shell::abort()
  • Cake\Database\Expression\QueryExpression::type() 已弃用。请改用 tieWith()
  • Cake\Database\Type\DateTimeType::$dateTimeClass 已弃用。请改用 DateTimeType::useMutable() 或 DateTimeType::useImmutable()。
  • Cake\Database\Type\\DateType::$dateTimeClass 已弃用。请改用 DateTimeType::useMutable()DateType::useImmutable()
  • Cake\ORM\ResultSet::_calculateTypeMap() 现在已弃用且未被使用。
  • Cake\ORM\ResultSet::_castValues() 现在已弃用且未被使用。

3.3 的开发现在将开始。3.3 的 路线图 尚未完成,因此,如果您想看到某个功能或改进,请在 IRC 和 github 上联系我们。3.2.0 的文档目前可在 手册API 中找到。

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

下载 github 上的打包版本