Context and Mapping Options
Provide context variables to the mapper to control the mapping process. Or get some information about the mapping process.
Context
The Context
object stores objects that are used during the mapping process.
The caller can provide a Context
in the map()
method. If not provided,
the mapper will create a new Context
object internally.
Context
stores objects using class names as keys. Therefore, only one object
of a given class can be stored in a Context
.
use Rekalogika\Mapper\Context\Context;
use Rekalogika\Mapper\MapperInterface;
// Create a context
$context = Context::create();
// Create a context, initialized with mapper options & a custom object
$mapperOptions = new MapperOptions(lazyLoading: false);
$yourCustomObject = new YourCustomObject();
$context = Context::create($mapperOptions, $yourCustomObject);
// Call map() with the context
/** @var MapperInterface $mapper */
$target = $mapper->map($source, TargetObject::class, $context);
// Add an object to the context, note that context is immutable
$context = $context->with($someObject);
// Remove an object from the context
$context = $context->without(SomeObject::class);
// Get an object from the context
$mapperOptions = $context->get(MapperOptions::class);
// or
$mapperOptions = $context(MapperOptions::class);
// Iterates over all objects in the context
foreach ($context as $object) {
// ...
}
The Context
is available in most of the places where you write code to
customize the mapping process.
Built-in Context Objects
The following context objects are provided by Mapper:
MapperOptions
: Options for the mapping process.ObjectCache
: Used to store objects that have already been mapped. It is used to handle circular references and to prevent infinite loops.Path
: Stores the mapping path. Used for tracing and creating meaningful error messages.NormalizerContext
andDenormalizerContext
: Used to store the context that will be used by Symfony Serializer.SourcePropertyAttributes
: The attributes of the source property.TargetPropertyAttributes
: The attributes of the target property.SourceClassAttributes
: The attributes of the source class.TargetClassAttributes
: The attributes of the target class.
Mapper Options
The MapperOptions
object is passed by the caller to provide options for the
mapping process. The following options are available:
lazyLoading
: Enable lazy-loading.readTargetValue
: If true, the mapper will get the existing value from the target. If exists, it will be used as the target. If false, the mapper will always create a new target object.