Новое в Symfony 5.3: Встроенный контекст сериализации

Компонент сериализатора предоставляет механизм для настройки способа сериализации/десериализации данных: параметры контекста. Эти параметры передаются как необязательный аргумент методов сериализации/десериализации.

В Symfony 5.3 улучшили сериализатор, чтобы вы могли определять контекст как часть информации о сопоставлении благодаря новой аннотации/атрибуту Serializer\Context.

Например, чтобы определить, как должно быть отформатировано какое-либо свойство datetime, используйте следующее:

use Symfony\Component\Serializer\Annotation as Serializer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;

class SomeClass
{
    /**
     * @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;
}

Аннотация/атрибут поддерживает разные контексты для нормализации/денормализации, а также может определять группы сериализации:

#[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;