更新日志 1.17.0 — 2025 年 6 月 20 日¶
重要变更¶
灵活的铸造设置分割
映射器设置enableFlexibleCasting已被(温和地)弃用,取而代之的是三种不同的模式,这保证了与以前相同的功能。
允许标量值转换:
启用此设置后,标量类型将接受可转换值:
-
整数类型将接受任何有效的数值,例如字符串值
"42"。 -
浮点类型将接受任何有效的数值,例如字符串值
"1337.42"。 -
字符串类型将接受任何实现
Stringable接口的整数、浮点数或对象。 -
布尔类型将接受任何真值或假值:
(string) "true"、(string) "1"和(int) 1将被转换为true(string) "false"、(string) "0"和(int) 0将被转换为false
(new \CuyZ\Valinor\MapperBuilder())
->allowScalarValueCasting()
->mapper()
->map('array{id: string, price: float, active: bool}', [
'id' => 549465210, // Will be cast to string
'price' => '42.39', // Will be cast to float
'active' => 1, // Will be cast to bool
]);
允许非顺序列表:
默认情况下,列表类型仅接受从 0 开始的连续键。
此设置允许映射器将关联数组转换为具有顺序键的列表。
(new \CuyZ\Valinor\MapperBuilder())
->allowNonSequentialList()
->mapper()
->map('list<int>', [
'foo' => 42,
'bar' => 1337,
]);
// => [0 => 42, 1 => 1337]
允许未定义的值:
允许映射器接受未定义的值(输入中缺少),方法是将它们转换为null (如果当前类型可为 null)或空数组(如果当前类型是对象或可迭代对象)。
(new \CuyZ\Valinor\MapperBuilder())
->allowUndefinedValues()
->mapper()
->map('array{name: string, age: int|null}', [
'name' => 'John Doe',
// 'age' is not defined
]);
// => ['name' => 'John Doe', 'age' => null]
新功能¶
- 三种不同模式下的拆分灵活铸造设置 ( 02ef8e )
其他¶
- 简化
ValueNode实现 ( 7e6ccf )