sopheos / pebble_dataconverter
数据映射器
0.0.2
2023-08-03 12:03 UTC
Requires
- php: >=8.1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
结构化数据转换库。
转换规则
转换规则可以是
- 一个实现了
ConverterInterface
的转换对象 - 一个回调函数(
callback
) - 一个关联数组,将数据的属性名称与规则关联起来。
- 一个从数据集中初始化的对象或类名。
链式调用
每个 ConverterInterface
转换工具允许添加其他后续执行的转换工具。
- 方法
one(mixed $rule): static
允许添加一个将作用于数据的规则。 - 方法
many(mixed $rule): static
允许添加一个将作用于数据可迭代元素中每个元素的规则。
转换对象列表
CallbackConverter
:将回调函数(callback)转换为转换对象。CollectionConverter
:将转换对象应用于数据可迭代元素的每个元素。DateTimeConverter
:将日期从一个格式转换为另一个格式。HydrateConverter
:将关联数组转换为初始化的对象。JsonDecodeConverter
:将字符串转换为关联数组。如果出错,则返回null。JsonEncodeConverter
:将数组或对象转换为Json。MapConverter
:将对象或关联数组的属性与规则关联起来。
示例
class Car { public $number; public $model; public $date; } class User { public $name; public $birthdate; public array $cars = []; } $input = json_encode([ 'name' => 'Toto', 'birthdate' => '1980-10-03', 'cars' => [ [ 'number' => 1651984, 'model' => 'renault', 'date' => '2000-01-01' ], [ 'number' => 2061161, 'model' => 'audi', 'date' => '2021-08-19' ], ] ]); $carConverter = MapConverter::create() ->map('model', function ($input) { return ucfirst($input); }) ->map('date', DatetimeConverter::create('Y-m-d', 'd/m/Y')) ->one(Car::class); $userConverter = JsonDecodeConverter::create() ->one([ 'birthdate' => DatetimeConverter::create('Y-m-d', 'd/m/Y'), 'cars' => Converter::create()->many($carConverter) ]) ->one(new User); $output = $userConverter($input);
结果
User Object
(
[name] => Toto
[birthdate] => 03/10/1980
[cars] => Array
(
[0] => Car Object
(
[number] => 1651984
[model] => Renault
[date] => 01/01/2000
)
[1] => Car Object
(
[number] => 2061161
[model] => Audi
[date] => 19/08/2021
)
)
)