Новое в 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
и сделает работу более продуктивной за счёт исключения повторений.