Новое в Symfony 6.4: Контексты сериализатора на основе классов

Источник: «New in Symfony 6.4: Class-based Serializer Contexts»
В Symfony 6.4 можно применить атрибут контекста сериализатора ко всему классу, чтобы определить общую конфигурацию контекста для всех свойств класса.

Pull request [Serializer] Allow Context to target classes #51476 Mathias Arlaud

Контекст сериализатора управляет сериализацией и десериализацией ресурсов. Этот контекст передаётся всем нормализаторам и может быть использован, например, для задания формата даты/времени, способа представления пустых объектов и массивов и т.д.

В Symfony этот контекст можно определить несколькими способами: как массив PHP, передаваемый методам serialize() и deserialize(), как параметр глобальной конфигурации framework.serializer.default_context и через атрибут #[Context] в свойствах класса.

В Symfony 6.4 мы представляем новый способ задания контекста сериализатора: использование атрибута #[Context] на самом классе:

namespace App\Model;

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

#[Context([DateTimeNormalizer::FORMAT_KEY => \DateTime::RFC3339])]
#[Context(
context: [DateTimeNormalizer::FORMAT_KEY => \DateTime::RFC3339_EXTENDED],
groups: ['extended'],
)
]

class Person
{
// ...
}

Атрибут #[Context], основанный на классе, применяется ко всем свойствам класса, которые могут переопределять эту конфигурацию с помощью собственных атрибутов #[Context]. Эта новая возможность улучшит DX (опыт разработчика) при работе с компонентом Serializer и сделает работу более продуктивной за счёт исключения повторений.

Дополнительные материалы

Предыдущая Статья

Проверка существования свойства объекта в JavaScript

Следующая Статья

Не бойтесь JavaScript-генераторов