Contributed by
Maxime Steinhausser
in #39399.
The Serializer component provides a mechanism to configure the way data is serialized/deserialized: the context options. These options are passed as an optional argument of the serialize/deserialize methods.
In Symfony 5.3 we’ve improved the serializer so you can define the context
as part of the mapping information thanks to a new Serializer\Context
annotation/attribute.
For example, to define how some datetime property should be formatted, use the following:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | useSymfony\Component\Serializer\AnnotationasSerializer;useSymfony\Component\Serializer\Normalizer\DateTimeNormalizer;classSomeClass{/** * @Serializer\Context({ DateTimeNormalizer::FORMAT_KEY = 'Y-m-d' }) */public\DateTime$date;// In PHP 8 applications you can use PHP attributes instead:#[Serializer\Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]public\DateTime$date;} |
The annotation/attribute supports different contexts for normalization/denormalization and it can also define serialization groups:
1 2 3 4 5 6 7 8 9 10 11 | #[Serializer\Context(normalizationContext:[DateTimeNormalizer::FORMAT_KEY=>'Y-m-d'],denormalizationContext:[DateTimeNormalizer::FORMAT_KEY=>\DateTime::COOKIE])]public\DateTime$date;#[Serializer\Context(normalizationContext:[DateTimeNormalizer::FORMAT_KEY=>\DateTime::RFC3339],groups:['extended'])]public\DateTime$date; |
Sponsor the Symfony project.