Новое в Symfony 7.2: Именованные сериализаторы

Источник: «New in Symfony 7.2: Named Serializers»
Symfony 7.2 позволяет конфигурировать несколько экземпляров сериализаторов с различными контекстами по умолчанию, конвертерами имён, наборами нормализаторов и кодировщиков.

В Symfony 7.2 компонент Serializer позволяет настроить несколько экземпляров сериализатора с различными контекстами по умолчанию, конвертерами имён, наборами нормализаторов и кодировщиков. Это удобно, если ваше приложение взаимодействует с несколькими API, каждый из которых использует свои правила.

Во-первых, используйте новую опцию named_serializers, чтобы определить различные сериализаторы и их контексты:

# config/packages/serializer.yaml
serializer:
named_serializers:
api_client1:
name_converter: 'serializer.name_converter.camel_case_to_snake_case'
default_context:
enable_max_depth: true
api_client2:
default_context:
enable_max_depth: false

Теперь можно внедрять различные сериализаторы с помощью именованных псевдонимов, включая атрибут Target:

class HomeController extends AbstractController
{
#[Route('/', name: 'app_home')]
public function index(
SerializerInterface $serializer, // Сериализатор по умолчания
SerializerInterface $apiClient1Serializer, // Сериализатор api_client1
#[Target('apiClient2.serializer')] // Сериализатор api_client2
SerializerInterface $someName,
) {
// ...
}
}

Если вы определяете кастомные нормализаторы, то можете применять их только к определённым сериализаторам благодаря атрибуту тега serializer (если не установить этот атрибут, нормализатор будет применяться только к сериализатору default):

get_set_method_normalizer:
class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
autoconfigure: false # это необходимо, поэтому он не включён в сериализатор по умолчанию
tags:
# единственный сериализатор
- serializer.normalizer: { serializer: 'api_client1' }
# или несколько
- serializer.normalizer: { serializer: [ 'api_client1', 'api_client2' ] }
# используйте *, чтобы включить сервис во все сериализаторы, включая используемый по умолчанию
- serializer.normalizer: { serializer: '*' }

Наконец, поскольку Symfony поставляется со встроенными нормализаторами и кодировщиками, появились новые опции, позволяющие исключить их, если не хотите их использовать:

serializer:
named_serializers:
api_client1:
include_built_in_normalizers: false
include_built_in_encoders: true
# ...

Комментарии


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

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

Автоматизация резервного копирования баз данных c Laravel