跳至正文

更新日志 0.7.0 — 2022 年 3 月 24 日

重要变更

警告此版本引入了更新之前必须考虑的重大重大更改

搭建商注册

自动命名构造函数发现已被禁用。现在必须显式注册映射器可以使用的自定义构造函数。

做出此决定是因为 @Ocramius 报告并在咨询顾问 GHSA-xhr8-mpwq-2rr2中描述的安全问题。

因此,现有代码必须列出映射器之前自动使用的所有命名构造函数,并使用MapperBuilder::registerConstructor()方法注册它们。

MapperBuilder::bind()方法已被弃用,取而代之的是上面的方法。

final class SomeClass
{
    public static function namedConstructor(string $foo): self
    {
        // …
    }
}

(new \CuyZ\Valinor\MapperBuilder())
    ->registerConstructor(
        SomeClass::namedConstructor(...),
        // …or for PHP < 8.1:
        [SomeClass::class, 'namedConstructor'],
    )
    ->mapper()
    ->map(SomeClass::class, [
        // …
    ]);

请参阅文档以获取更多信息。


源构建器

Source类是非普通数组或可迭代源的新入口点。它允许以方便的方式访问其他功能,例如驼峰式键或自定义路径映射。

应按如下方式使用:

$source = \CuyZ\Valinor\Mapper\Source\Source::json($jsonString)
    ->camelCaseKeys()
    ->map([
        'towns' => 'cities',
        'towns.*.label' => 'name',
    ]);

$result = (new \CuyZ\Valinor\MapperBuilder())
    ->mapper()
    ->map(SomeClass::class, $source);

有关其用法的更多详细信息,请参阅文档。

⚠ 重大变更

  • 将Attributes::ofType返回类型更改为array ( 1a599b )
  • 引入方法来注册映射期间使用的构造函数( ecafba )

新功能

  • 引入路径映射源修饰符 ( b7a7d2 )
  • 引入源构建器( ad5103 )

错误修复

  • 使用驼峰式源键修饰符处理数字键 ( b8a18f )
  • 处理参数默认对象值编译( fdef93 )
  • 处理可调用构造函数中的可变参数( b646cc )
  • 正确处理函数反射的别名类型( e5b515 )

其他

  • 运行感染时添加 Striker HTML 报告 ( 79c7a4 )
  • 在函数定义中处理类名( e2451d )
  • 引入函数容器来包装定义处理( fd1117 )