Новое в Symfony 6.4: Улучшения Serializer

Источник: «New in Symfony 6.4: Serializer Improvements»
В Symfony 6.4 добавлены новые возможности в Serializer, такие, как групповые атрибуты на основе классов, нормализация объектов Translatable и детализация ошибок декодирования JSON.

Групповые атрибуты на основе класса

Группы сериализации позволяют сериализовать различные наборы атрибутов сущностей в соответствии с вашими потребностями. Имя группы — это произвольная строка, связывающая свойство с одним или несколькими наборами сериализации.

В Symfony 6.4 мы улучшаем группы сериализации, поэтому их можно определять и на уровне класса. При этом все свойства будут ассоциированы с этой группой, в дополнение к группам, с которыми каждое свойство ассоциируется опционально:

#[ORM\Entity]
#[Groups(['show_product'])]
class Product
{
// ...

#[ORM\Column(type: 'string', length: 255)]
#[Groups(['list_product'])]
private string $name;

#[ORM\Column(type: 'text')]
private string $description;
}

В данном примере свойство name принадлежит группам show_product и list_product, а свойство description — только группе show_product.

Нормализатор переводимых объектов

В Symfony 5.2 мы представили переводимые объекты — объекты, содержащие всю информацию, необходимую для перевода собственного содержимого, например, параметры перевода и домен перевода.

В Symfony 6.4 появился нормализатор TranslatableObject, который при сериализации объектов переводит содержимое этих объектов в локаль, заданную в опции NORMALIZATION_LOCALE_KEY. Для использования этого нового нормализатора ничего делать не нужно. Обновите ваше приложение до версии Symfony 6.4 или выше, и он будет работать "из коробки".

Подробные ошибки декодирования JSON

Рассмотрим следующий фрагмент JSON, содержащий некую синтаксическую ошибку:

$jsonContent = "{'foo': 'bar'}";

В текущих версиях Symfony при попытке десериализовать это содержимое возникает следующая ошибка:

{
"title": "Deserialization Failed",
"detail": "Syntax error"
}

Не очень полезно, верно? В Symfony 6.4 мы значительно улучшили эту возможность. Сначала установите зависимость seld/jsonlint в свой проект. Затем перейдите на Symfony 6.4 или выше, и при запуске приложения в режиме отладки вы увидите подробные ошибки, подобные следующим:

{
"title": "Deserialization Failed",
"detail": "Parse error on line 1: {'foo': 'bar'} Invalid string, it appears you used single quotes instead of double quotes"
}

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

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

Пакет Laravel htmx

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

Неортодоксальный Eloquent