CakePHP 3.2.0-RC1 发布

CakePHP 核心团队很高兴宣布 CakePHP 3.2.0-RC1 立即发布。此版本是 3.2 分支的第一个候选版本,它为 3.x 系列添加了一些新功能。我们感谢您在新的 API 定义稳定之前提供任何关于这些新功能的反馈。

最低要求 PHP 5.5

CakePHP 3.2 至少需要 PHP 5.5.10。通过采用 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 的一个分支,没有额外的依赖关系。它还提供了一个日历日期对象,以及日期和时间对象的不可变版本。

新日期对象

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

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

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

use Cake\I18n\FrozenTime;

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

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

添加了 CorsBuilder

为了使设置与跨域请求 (CORS) 相关的标头变得更容易,添加了一个新的 CorsBuilder。此类允许您使用流畅的界面定义 CORS 相关的标头。

ORM 改进

  • 包含同一个关联多次现在按预期工作,并且查询生成器函数现在被堆叠。
  • 函数表达式现在会正确地转换其结果。这意味着像 $query->func()->current_date() 这样的表达式将返回日期时间实例。

改进的验证器 API

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

$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。如果您的 shell/任务正在捕获 \Exception,而这些方法原本会被调用,则这些捕获块需要更新,以便它们不会捕获 StopException。通过不调用 exit(),测试 shell 应该更容易,并且需要更少的模拟。

Helpers 初始化()

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.2.0-RC1 版本存在重大问题,否则我们将在接下来的 4-5 周内发布一个稳定版本。3.2.0 的文档现在可以在 手册API 中找到。

一如既往,衷心感谢所有帮助实现此版本发布的社区成员,他们报告了问题并提交了拉取请求。

下载 GitHub 上的打包发布版本