Middleware 0.1 [alpha]
Definition of a Mapping
A mapping is an operation that associates each element of a source of data into a new format of the same data. By this operation, it is possible to transform the way the data is represented.
The Abstract Mapping Tree
The abstract mapping tree is a representation of the mapping to apply to your data, in order to transform its representation. It is an internal representation build for a computer to understand how it will have to change the data representation during the mapping operation.
Components included
The php-etl/fast-map
component
This component is in charge of representing the Abstract Mapping Tree, and transforming it into compiled PHP code. This compiled PHP code is the actual code that will do the mapping, in an optimized way.
The php-etl/fast-map-config
component
This component allows you to configure your mapper according to the type of data you want to input.
If you need to config your mappers, we advise you to use the yml config which will generate a php code usable by the fast-map-config. This code will then be converted into a machine code that can be used by the fast map package.
Installation
composer require php-etl/fast-map-plugin
Configuration
fastmap:
map:
- field: 'products'
class: 'Model\\Product'
expression: 'merge( input["items"], input["shippings"] )'
collection:
- field: 'sku'
copy: '[sku]'
- field: 'price'
expression: 'input["price"]'
class: 'Model\\Price'
object:
- field: 'amount'
expression: 'input["value"]'
- field: 'currency'
expression: 'input["currency"]'
<?php
use Kiboko\Component\FastMapConfig\CompositeBuilder;
use Kiboko\Component\FastMapConfig\ObjectBuilder;
use Kiboko\Component\FastMap\Compiler;
use Kiboko\Component\FastMap\PropertyAccess\EmptyPropertyPath;
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
use Model\Product;
use Model\Price;
$mapper = (new ObjectBuilder(Order::class, null, $interpreter))
->children()
->collection('products', 'merge( input["items"], input["shippings"] )', Product::class)
->children()
->copy('sku', '[sku]')
->object('price', 'input["price"]', Price::class)
->children()
->expression('amount', 'input["value"]')
->expression('currency', 'input["currency"]')
->end()
->end()
->end()
->end()
->end()
->getMapper();