@@ -368,6 +368,87 @@ stored in one of the following locations:
368
368
369
369
.. _serializer-enabling-metadata-cache :
370
370
371
+ Using nested attributes
372
+ -----------------------
373
+
374
+ To map nested properties, a ``SerializedPath `` can be defined with annotations,
375
+ attributes and YAML or XML configurations:
376
+
377
+ .. configuration-block ::
378
+
379
+ .. code-block :: php-annotations
380
+
381
+ namespace App\Model;
382
+
383
+ use Symfony\Component\Serializer\Annotation\SerializedPath;
384
+
385
+ class Person
386
+ {
387
+ /**
388
+ * @SerializedPath("[profile][information][birthday]")
389
+ */
390
+ private string $birthday;
391
+
392
+ // ...
393
+ }
394
+
395
+ .. code-block :: php-attributes
396
+
397
+ namespace App\Model;
398
+
399
+ use Symfony\Component\Serializer\Annotation\SerializedPath;
400
+
401
+ class Person
402
+ {
403
+ #[SerializedPath('[profile][information][birthday]')]
404
+ private string $birthday;
405
+
406
+ // ...
407
+ }
408
+
409
+ .. code-block :: yaml
410
+
411
+ App\Model\Person :
412
+ attributes :
413
+ dob :
414
+ serialized_path : ' [profile][information][birthday]'
415
+
416
+ .. code-block :: xml
417
+
418
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
419
+ <serializer xmlns =" http://symfony.com/schema/dic/serializer-mapping"
420
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
421
+ xsi : schemaLocation =" http://symfony.com/schema/dic/serializer-mapping
422
+ https://symfony.com/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd"
423
+ >
424
+ <class name =" App\Model\Person" >
425
+ <attribute name =" dob" serialized-path =" [profile][information][birthday]" />
426
+ </class >
427
+ </serializer >
428
+
429
+ .. versionadded :: 6.2
430
+
431
+ The option to configure a ``SerializedPath `` was introduced in Symfony 6.2.
432
+
433
+ Using the configuration from above, denormalizing with a metadata-aware
434
+ normalizer will write the ``birthday `` field from ``$data `` onto the ``Person ``
435
+ object::
436
+
437
+ $data = [
438
+ 'profile' => [
439
+ 'information' => [
440
+ 'birthday' => '01-01-1970',
441
+ ],
442
+ ],
443
+ ];
444
+ $person = $normalizer->denormalize($data, Person::class, 'any');
445
+ $person->getBirthday(); // 01-01-1970
446
+
447
+ When using annotations or attributes, the ``SerializedPath `` can either
448
+ be set on the property or the associated getter. The ``SerializedPath ``
449
+ cannot be used in combination with a ``SerializedName `` for the same propety.
450
+ The given path must be a string that can be parsed as a ``PropertyPath ``.
451
+
371
452
Configuring the Metadata Cache
372
453
------------------------------
373
454
0 commit comments