Serialization using ObjectMapper
The object hydrator based serialization provides an easy way to serialize events to plain/scalar data structures. Unlike plain serialization this serialization implementation doesn’t require you to write your own mapping code. Instead, it uses a combination of conventions and PHP 8 Attributes to map objects to raw data and back.
For backwards-compatibility reasons this is not the default strategy, so you’ll need to configure your setup to use it.
use EventSauce\EventSourcing\Serialization\ConstructingMessageSerializer;
use EventSauce\EventSourcing\Serialization\ObjectMapperPayloadSerializer;
$serializar = new ConstructingMessageSerializer(
payloadSerializer: new ObjectMapperPayloadSerializer()
);
// next, inject this serializer where-ever you need it :)
Creating events
Using the Object Mapper serialization, your events need to comply with the conventions of the underlying package. These are
- The constructor is used during deserialization.
- All constructor parameters are converted to snake_case when looking for input
- All getters and public properties are used for deserialization
- All getter names and public property names are converted to snake_case for serialization
An example events:
<?php
namespace AcmeCorp\SomeNamespace;
class SomethingHappened
{
public function __construct(
private string $where,
private DateTimeImmutable $when,
private int $howManyTimes
) {}
public function where(): string
{
return $this->where;
}
public function when(): DateTimeImmutable
{
return $this->when;
}
public function howManyTimes(): int
{
return $this->howManyTimes;
}
}
Advanced usage
For advanced usage, checkout the eventsauce/object-hydrator documentation.