fastnorth / property-mapper
Transforms data structures
Installs: 48 105
Dependents: 1
Suggesters: 0
Security: 0
Stars: 5
Watchers: 25
Forks: 1
Open Issues: 0
Requires
- symfony/property-access: ~2.7|~3.2|~4.0|~5.0|~6.0|~7.0
Requires (Dev)
- phpunit/phpunit: ^4.8
- symfony/var-dumper: ~2.7|~3.2|~4.0
This package is not auto-updated.
Last update: 2024-10-26 18:59:58 UTC
README
A common programming task deals with transforming data structures into one another, for instance for instance processing data from an API, or a database, into objects for internal usage. This library helps with creating mappers that can be:
- Reversed
- Written in isolation
- Composed
- Re-used
- Tested
Usage
Mapping operations are two-fold, first you define a Map
, that defines which
properties map to which, after which you can use the Mapper
to apply it to
two entities. This library uses Symfony's
PropertyAccess
component internally to read and write from the given entities, so they can be
both objects and arrays. The property notation follows PropertyAccess' notation.
Creating A Map
Creating a map is simply a matter of specifying all the properties on both sides of the map:
<?php use FastNorth\PropertyMapper\Map; $map = new Map; $map ->map('someProperty', 'toAnotherProperty'); ->map('yetAnotherProperty', 'toSomethingElse');
Applying a map
Applying a map can be done by creating a Mapper
, and calling process()
:
<?php use FastNorth\PropertyMapper\Map; // $map = ...; $objectOne = new ClassOne; $objectTwo = new ClassTwo; $mapper = new Mapper; // Applies the map, taking properties from $objectOne and applying them to $objectTwo $mapper->process($objectOne, $objectTwo, $map);
The map can also be applied in reverse, using reverse()
:
<?php // Applies the map in reverse, taking properties from $objectTwo and applying them to $objectOne $mapper->reverse($objectOne, $objectTwo, $map);
Transforming Values
Part of the mapping operations is taking a value from one side of the
operation, applying a transforming operation to it, then applying it to the
other. For instance, date/time might be stored as a string or integer timestamp
on one end, but a PHP DateTime
object on the other. FastNorth PropertyMapper
supports this with the concept of "Transformers".
Transformers are bi-directional, meaning they can process data in both
directions, allowing the mapper to process maps in reverse()
.
Adding Transformers To a Map
Any transformer (implementing
FastNorth\PropertyMapper\Transformer\TransformerInterface
) can be passed as a
third parameter to map()
:
<?php use FastNorth\PropertyMapper\Map; use FastNorth\PropertyMapper\Transformer\Datetime\StringToDateTime; $map = new Map; $map->map('aStringDateProperty', 'aDateTimeProperty', new DateTimeTransformer('Y-m-d'));