跳至正文

更新日志 0.14.0 — 2022 年 9 月 1 日

重要变更

在此版本之前,日期对象创建的行为非常固执己见:测试了大量日期格式,如果其中一个有效,则使用它来创建日期。

这种方法导致了两个问题。首先,它导致了(较小的)性能问题,因为许多日期格式可能没有经过任何测试。更重要的是,无法定义允许哪些格式(并最终拒绝其他格式)。

现在可以在MapperBuilder中使用新方法:

(new \CuyZ\Valinor\MapperBuilder())
    // Both `Cookie` and `ATOM` formats will be accepted
    ->supportDateFormats(DATE_COOKIE, DATE_ATOM)
    ->mapper()
    ->map(DateTimeInterface::class, 'Monday, 08-Nov-1971 13:37:42 UTC');

请注意,旧的行为已被删除。从现在开始,默认只接受有效的时间戳或 ATOM 格式的值。

如果需要并帮助迁移,可以注册以下已弃用的构造函数以重新激活以前的行为:

(new \CuyZ\Valinor\MapperBuilder())
    ->registerConstructor(
        new \CuyZ\Valinor\Mapper\Object\BackwardCompatibilityDateTimeConstructor()
    )
    ->mapper()
    ->map(DateTimeInterface::class, 'Monday, 08-Nov-1971 13:37:42 UTC');

⚠ 重大变更

  • 引入自定义日期格式的构造函数 ( f232cc )

新功能

  • 处理抽象构造函数注册( c37ac1 )
  • 引入特性DynamicConstructor ( e437d9 )
  • 引入辅助方法来描述支持的日期格式( 11a7ea )

错误修复

  • 允许在指定结构的数组中使用尾随逗号 ( bf445b )
  • 正确获取文件系统缓存条目 ( 48208c )
  • 检测无效的构造函数句柄类型( b3cb59 )
  • 在类型解析器中以区分大小写的方式处理类( 254074 )
  • 处理并发缓存文件创建 ( fd39ae )
  • 处理类定义中继承的私有构造函数( 73b622 )
  • 递归处理无效节点( a401c2 )
  • 防止 PSR-16 缓存键中存在非法字符 ( 3c4d29 )
  • 正确处理同一类的可调用对象( ae7ddc )

其他

  • 添加ClassStringType ( 4bc50e ) 的单例用法
  • 更改ObjectBuilderFactory::for返回签名( 57849c )
  • 提取原生构造函数对象生成器( 2b46a6 )
  • 获取函数定义的特性( ec494c )
  • 重构参数实例化 ( 6414e9 )