demvsystems / mapper
mapper
Installs: 16 990
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 7
Forks: 0
Open Issues: 1
Requires
- php: ^7.1 || ^8.0
Requires (Dev)
- codeception/specify: ^0.4.5
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2025-03-11 15:43:13 UTC
README
Der Mapper ist dazu da, flexibel verschiedene Array-Formate in und vom Aggregations-Array-Format umzuwandeln. Durch die Umwandlung in das vorliegende Aggregations-Array-Format kann anschließend das Resultat direkt per Array-Import als Kunde importiert werden. Nach einem Export kann mithilfe des Mappers das resultierende Format in ein vorheriges, nicht notwendigerweise konformes Format geändert werden. Die Funktionsweise ist sehr einfach & flexibel. Ein Beispiel:
$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 ] ] ] );
Mit der Methode map
wird angegeben, dass wir den Key Vor-Name
der im Unter-Array Daten
steckt - also sich hier befindet: ['Daten']['Vor-Name']
) - in den Key vorname
des Unterarray grunddaten
des resultierenden Arrays schreiben möchten. Die Dot-Notation gibt dabei beliebig geschachtelte Array-Strukturen an. $result
wäre daher
[
'grunddaten' => [
'vorname' => 'Müller'
],
'finanzen' => [
'netto' => 1500
]
]
Mit dem optionalen Callback können Die Werte vor dem schreiben verifiziert bzw. modifiziert werden.
Die nun vorliegende Struktur lässt sich auch wieder in die Ursprungs-Struktur zurück transformieren:
$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
würde also wieder aussehen, wie die Eingangs-Struktur:
[
'Daten' => [
'Vor-Name' => 'Müller'
],
'Finanzen' => [
'Netto' => [
'Betrag' => 1500
]
]
]
Da es in der Aggregation bereits fest definierte Strukturen gibt, existiert neben dem Mapper auch ein KundenMapper
und ein MaklerMapper
, der die entsprechenden Funktionalitäten, wie das grunddaten Mapping, bereits als Methode anbieten, in der man Ziel und Quelle in der Dot-Notation angibt:
$mapper->grunddaten('vorname', 'Daten.Vor-Name');
Das Resultat von applyMapping
wäre bei der Eingangs erwähnten Struktur wie folgt:
[
'grunddaten' => [
'vorname' => 'Müller'
]
]