Новое в Symfony 6.4: Улучшения Serializer
Групповые атрибуты на основе класса
Группы сериализации позволяют сериализовать различные наборы атрибутов сущностей в соответствии с вашими потребностями. Имя группы — это произвольная строка, связывающая свойство с одним или несколькими наборами сериализации.
В 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
- Pull Request: [FrameworkBundle] Enable json_decode_detailed_errors in dev by default #51215 Gabriel Ostrolucký
- Pull Request: [Serializer] Add support for seld/jsonlint #51172 Gabriel Ostrolucký
Рассмотрим следующий фрагмент 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"
}