diff --git a/serializer/custom_normalizer.rst b/serializer/custom_normalizer.rst index 4221b3ad808..d965c62e2ef 100644 --- a/serializer/custom_normalizer.rst +++ b/serializer/custom_normalizer.rst @@ -164,31 +164,29 @@ Improving Performance of Normalizers/Denormalizers The ``getSupportedTypes()`` method was introduced in Symfony 6.3. -Both :class:`Symfony\\Component\\Serializer\\Normalizer\\NormalizerInterface` -and :class:`Symfony\\Component\\Serializer\\Normalizer\\DenormalizerInterface` -contain a new method ``getSupportedTypes()``. This method allows normalizers or -denormalizers to declare the type of objects they can handle, and whether they -are cacheable. With this info, even if the ``supports*()`` call is not cacheable, -the Serializer can skip a ton of method calls to ``supports*()`` improving -performance substantially in some cases. +Both :class:Symfony\\Component\\Serializer\\Normalizer\\NormalizerInterface +and :class:Symfony\\Component\\Serializer\\Normalizer\\DenormalizerInterface +define a ``getSupportedTypes()`` method to declare which types they support and +whether their ``supports*()`` result can be cached. + +This **does not** cache the actual normalization or denormalization result. It +only **caches the decision** of whether a normalizer supports a given type, allowing +the Serializer to skip unnecessary ``supports*()`` calls and improve performance. The ``getSupportedTypes()`` method should return an array where the keys -represent the supported types, and the values indicate whether the result of -the ``supports*()`` method call can be cached or not. The format of the -returned array is as follows: +represent the supported types, and the values indicate whether the result of the +corresponding ``supports*()`` call can be cached. The array format is as follows: #. The special key ``object`` can be used to indicate that the normalizer or denormalizer supports any classes or interfaces. #. The special key ``*`` can be used to indicate that the normalizer or - denormalizer might support any types. -#. The other keys in the array should correspond to specific types that the - normalizer or denormalizer supports. -#. The values associated with each type should be a boolean indicating if the - result of the ``supports*()`` method call for that type can be cached or not. - A value of ``true`` means that the result is cacheable, while ``false`` means - that the result is not cacheable. -#. A ``null`` value for a type means that the normalizer or denormalizer does - not support that type. + denormalizer might support any type. +#. Other keys should correspond to specific types that the normalizer or + denormalizer supports. +#. The values should be booleans indicating whether the result of the + ``supports*()`` call for that type is cacheable. Use ``true`` if the result + can be cached, ``false`` if it cannot. +#. A ``null`` value means the normalizer or denormalizer does not support that type. Here is an example of how to use the ``getSupportedTypes()`` method:: @@ -201,9 +199,9 @@ Here is an example of how to use the ``getSupportedTypes()`` method:: public function getSupportedTypes(?string $format): array { return [ - 'object' => null, // Doesn't support any classes or interfaces - '*' => false, // Supports any other types, but the result is not cacheable - MyCustomClass::class => true, // Supports MyCustomClass and result is cacheable + 'object' => null, // doesn't support any classes or interfaces + '*' => false, // supports any other types, but the decision is not cacheable + MyCustomClass::class => true, // supports MyCustomClass and decision is cacheable ]; } }