wundii / data-mapper
Modern and fast object mapper for PHP 8.2+. Strict types. Converts JSON, XML, YAML, NEON, arrays, and objects to PHP objects.
Installs: 3 162
Dependents: 4
Suggesters: 0
Security: 0
Stars: 4
Watchers: 1
Forks: 1
Open Issues: 0
Requires (Dev)
- nette/neon: ^v3.4
- phpstan/phpstan: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^11.4
- rector/rector: ^2.0
- symfony/var-dumper: ^7.0
- symplify/easy-coding-standard: ^12.3
- wundii/phplint: ^0.3
README
This library is an extremely fast and strictly typed object mapper built for modern PHP (8.2+). It seamlessly transforms data from formats like JSON, NEON, XML, YAML, arrays, and standard objects into well-structured PHP objects.
Ideal for developers who need reliable and efficient data mapping without sacrificing code quality or modern best practices.
Features
- Mapping source data into objects
- Mapping source data with a list of elements into a list of objects
- Initialize object via constructor, properties or methods
- Map nested objects, arrays of objects
- Class mapping for interfaces or other classes
- Custom root element for starting with the source data
- Auto-casting for
float
types (eu to us decimal separator) - Target alias via Attribute for properties and methods
Supported Types
null
bool
|?bool
int
|?int
float
|?float
string
|?string
array
int[]
float[]
string[]
object[]
object
|?object
enum
|?enum
Supported Formats
optional formats are marked with an asterisk *
array
json
neon
*object
public property
public getters
method toArray()
attribute SourceData('...')
xml
yaml
*
Installation
Require the bundle and its dependencies with composer:
composer require wundii/data-mapper
Installations for frameworks
Usage
Minimal usage
use Wundii\DataMapper\DataMapper; /** * DataConfig default settings * - ApproachEnum::SETTER - will use the constructor to map the data * - AccessibleEnum::PUBLIC - will use only public properties/methods * - classMap = [] - will not map any classes */ $dataMapper = new DataMapper(); $testClass = $dataMapper->array($array, TestClass::class); $testClass = $dataMapper->json($json, TestClass::class); $testClass = $dataMapper->neon($neon, TestClass::class); $testClass = $dataMapper->xml($xml, TestClass::class); $testClass = $dataMapper->yaml($yaml, TestClass::class);
Usage with custom configuration
use Wundii\DataMapper\DataConfig; use Wundii\DataMapper\DataMapper; use Wundii\DataMapper\Enum\ApproachEnum; $dataConfig = new DataConfig( approachEnum: ApproachEnum::PROPERTY, classMap: [ DateTimeInterface::class => DateTime::class, ], ); $dataMapper = new DataMapper($dataConfig); $testClass = $dataMapper->array($array, TestClass::class); $testClass = $dataMapper->json($json, TestClass::class); $testClass = $dataMapper->neon($neon, TestClass::class); $testClass = $dataMapper->xml($xml, TestClass::class); $testClass = $dataMapper->yaml($yaml, TestClass::class);