diff --git a/serializer.rst b/serializer.rst index d041af7faa1..fa3a30796cb 100644 --- a/serializer.rst +++ b/serializer.rst @@ -368,6 +368,87 @@ stored in one of the following locations: .. _serializer-enabling-metadata-cache: +Using nested attributes +----------------------- + +To map nested properties, a ``SerializedPath`` can be defined with annotations, +attributes and YAML or XML configurations: + +.. configuration-block:: + + .. code-block:: php-annotations + + namespace App\Model; + + use Symfony\Component\Serializer\Annotation\SerializedPath; + + class Person + { + /** + * @SerializedPath("[profile][information][birthday]") + */ + private string $birthday; + + // ... + } + + .. code-block:: php-attributes + + namespace App\Model; + + use Symfony\Component\Serializer\Annotation\SerializedPath; + + class Person + { + #[SerializedPath('[profile][information][birthday]')] + private string $birthday; + + // ... + } + + .. code-block:: yaml + + App\Model\Person: + attributes: + dob: + serialized_path: '[profile][information][birthday]' + + .. code-block:: xml + + + + + + + + +.. versionadded:: 6.2 + + The option to configure a ``SerializedPath`` was introduced in Symfony 6.2. + +Using the configuration from above, denormalizing with a metadata-aware +normalizer will write the ``birthday`` field from ``$data`` onto the ``Person`` +object:: + + $data = [ + 'profile' => [ + 'information' => [ + 'birthday' => '01-01-1970', + ], + ], + ]; + $person = $normalizer->denormalize($data, Person::class, 'any'); + $person->getBirthday(); // 01-01-1970 + +When using annotations or attributes, the ``SerializedPath`` can either +be set on the property or the associated getter. The ``SerializedPath`` +cannot be used in combination with a ``SerializedName`` for the same propety. +The given path must be a string that can be parsed as a ``PropertyPath``. + Configuring the Metadata Cache ------------------------------ pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy