Сначала мы можем увидеть из определения метода:
/**
* Checks whether the given class is supported for normalization by this normalizer.
*
* @param mixed $data Data to normalize
* @param string $format The format being (de-)serialized from or into
*
* @return bool
*/
public function supportsNormalization($data, $format = null);
, что этот метод возвращает false
, когда нормализация $data
не поддерживается этим нормализатором. И только когда этот метод вернет true
, будет вызван ваш normalize
метод.
Первый параметр, который получает supportNormalization
- это формат, например json
, jsonapi
, jsonhal
и т. Д.
Так что, если в вашей конфигурации api_platform.yaml
есть что-то вроде:
api_platform:
formats:
jsonld: ['application/ld+json']
но вы в своей services.yaml
службе регистрации:
services:
'App\Serializer\CustomItemNormalizer':
arguments: [ '@api_platform.serializer.normalizer.item' ]
supportNormalization
всегда будет возвращать false
, поскольку нормализатор ввода / декорации не поддерживает jsonld
, и вам необходимо иметь:
services:
'App\Serializer\CustomItemNormalizer':
arguments: [ 'api_platform.jsonld.normalizer.item' ]
Здесь у вас есть список список доступных сериализаторов для определенного формата (в doc отсутствует сериализатор для JSONAPI).
В большинстве случаев я использую (де) нормализатор для изменения / добавления некоторых данных, но это возможно, если вы украсите нормализатор:
services:
'App\Serializer\CustomItemNormalizer':
decorates: 'api_platform.jsonld.normalizer.item'
arguments: [ '@App\Serializer\CustomItemNormalizer.inner' ]
Ссылка на , декорирование сериализатора и добавление дополнительных данных .
Итак, в конце вам нужно ввести правильный нормализатор и украсить его.