demvsystems/mapper

v2.0.1 2021-07-26 07:07 UTC

This package is auto-updated.

Last update: 2024-09-11 14:42:02 UTC


README

Der Mapper旨在灵活地将不同的数组格式转换为和从聚合数组格式转换。通过转换为现有的聚合数组格式,结果可以直接通过数组导入作为客户导入。导出后,可以使用映射器将结果格式更改为先前的格式,这可能是非兼容的。其功能非常简单且灵活。一个例子

$mapper = new Mapper();
$mapper->map('Daten.Vor-Name', function(MapperInterface $mapper, $value) {
    $mapper->setAttribute('grunddaten.vorname', $value);
});
$mapper->map('Finanzen.Netto.Betrag', function(MapperInterface $mapper, $value) {
    $mapper->setAttribute('finanzen.netto', (int) $value > 0 ? $value : 0);
});
$result = $mapper->applyMapping(
    [
        'Daten' => [
            'Vor-Name' => 'Müller'
        ],
        'Finanzen' => [
            'Netto' => [
                'Betrag' => 1500
            ]
        ]
    ]
);

使用map方法指定,我们想要将位于子数组Daten中的键Vor-Name(即位于此处:['Daten']['Vor-Name'])写入结果数组子数组grunddaten的键vorname。点符号表示任意嵌套的数组结构。$result因此将是

[
	'grunddaten' => [
		'vorname' => 'Müller'
	],
	'finanzen' => [
		'netto' => 1500
	]
]

使用可选的回调可以在写入之前验证或修改值。

现在存在的结构也可以转换回原始结构

$mapper = new Mapper();
$mapper->map('grunddaten.vorname', function(MapperInterface $mapper, $value) {
    $mapper->setAttribute('Daten.Vor-Name', $value);
});
$mapper->map('finanzen.netto', function(MapperInterface $mapper, $value) {
    $mapper->setAttribute('Finanzen.Netto.Betrag', $value);
});
$source = $mapper->applyMapping($result);

$source将再次看起来像输入结构

[
    'Daten' => [
        'Vor-Name' => 'Müller'
    ],
    'Finanzen' => [
        'Netto' => [
            'Betrag' => 1500
        ]
    ]
]

由于聚合中已经存在预定义的结构,除了映射器之外,还有一个KundenMapper和一个MaklerMapper,它们提供了相应的功能,如基本数据映射,作为方法提供,在其中可以指定目标和源,使用点符号表示

$mapper->grunddaten('vorname', 'Daten.Vor-Name');

当使用输入时提到的结构时,applyMapping的结果如下

[
	'grunddaten' => [
		'vorname' => 'Müller'
	]
]