更新日志 0.12.0 — 2022 年 7 月 10 日¶
重要变更¶
安全性——用户态异常过滤
有关更多信息,请参阅咨询 GHSA-5pgm-3j3g-2rc7 。
构造函数中抛出的用户态异常将不再被映射器自动捕获。这可以防止包含敏感信息的消息到达最终用户——例如显示查询的一部分的 SQL 异常。
为了让异常被认为是安全的,必须谨慎使用新方法MapperBuilder::filterExceptions() 。
final class SomeClass
{
public function __construct(private string $value)
{
\Webmozart\Assert\Assert::startsWith($value, 'foo_');
}
}
try {
(new \CuyZ\Valinor\MapperBuilder())
->filterExceptions(function (Throwable $exception) {
if ($exception instanceof \Webmozart\Assert\InvalidArgumentException) {
return \CuyZ\Valinor\Mapper\Tree\Message\ThrowableMessage::from($exception);
}
// If the exception should not be caught by this library, it
// must be thrown again.
throw $exception;
})
->mapper()
->map(SomeClass::class, 'bar_baz');
} catch (\CuyZ\Valinor\Mapper\MappingError $exception) {
// Should print something similar to:
// > Expected a value to start with "foo_". Got: "bar_baz"
echo $exception->node()->messages()[0];
}
树节点 API 返工
类\CuyZ\Valinor\Mapper\Tree\Node已被重构,以删除对不属于公共 API 一部分的不需要的方法的访问。以下是所有更改的列表:
-
新方法
$node->sourceFilled()和$node->sourceValue()允许访问源值。 -
方法
$node->value()已重命名为$node->mappedValue(),如果节点无效,则会抛出异常。 -
方法
$node->type()现在返回一个字符串。 -
方法
$message->name()、$message->path()、$message->type()和$message->value()已被弃用,取而代之的是新方法$message->node()。 -
消息参数
{original_value}已被弃用,取而代之的是{source_value}。
访问删除了库公共 API 的几个部分
对类/函数定义、类型和异常的访问并没有为库的实际目标增加价值。将这些功能保留在公共 API 标志下会导致更多的维护负担,而撤销它们的访问权限可以使库的整体开发更加灵活。
⚠ 重大变更¶
错误修复¶
其他¶
- 忽略
.idea文件夹 ( 84ead0 )