diff --git a/src/Bundle/ChillMainBundle/Serializer/Normalizer/DoctrineExistingEntityNormalizer.php b/src/Bundle/ChillMainBundle/Serializer/Normalizer/DoctrineExistingEntityNormalizer.php new file mode 100644 index 000000000..d8c53ae56 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Serializer/Normalizer/DoctrineExistingEntityNormalizer.php @@ -0,0 +1,38 @@ +em = $em; + } + + public function denormalize($data, string $type, string $format = null, array $context = []) + { + if (\array_key_exists(AbstractNormalizer::OBJECT_TO_POPULATE, $context)) { + return $context[AbstractNormalizer::OBJECT_TO_POPULATE]; + } + + return $this->em->getRepository($type) + ->find($data['id']); + } + + public function supportsDenormalization($data, string $type, string $format = null) + { + return \is_array($data) + && count($data) === 1 + && \array_key_exists('id', $data) + && $this->em->getClassMetadata($type) instanceof ClassMetadata; + } + +} diff --git a/src/Bundle/ChillMainBundle/config/services.yaml b/src/Bundle/ChillMainBundle/config/services.yaml index 93a4ee4e4..10294e6a2 100644 --- a/src/Bundle/ChillMainBundle/config/services.yaml +++ b/src/Bundle/ChillMainBundle/config/services.yaml @@ -3,6 +3,12 @@ parameters: services: + Chill\MainBundle\Serializer\Normalizer\: + resource: '../Serializer/Normalizer' + autowire: true + tags: + - { name: 'serializer.normalizer', priority: 64 } + chill.main.helper.translatable_string: class: Chill\MainBundle\Templating\TranslatableStringHelper arguments: diff --git a/src/Bundle/ChillMainBundle/config/services/serializer.yaml b/src/Bundle/ChillMainBundle/config/services/serializer.yaml index fa30b876d..c7cc6ca63 100644 --- a/src/Bundle/ChillMainBundle/config/services/serializer.yaml +++ b/src/Bundle/ChillMainBundle/config/services/serializer.yaml @@ -1,21 +1,11 @@ --- services: - Chill\MainBundle\Serializer\Normalizer\CenterNormalizer: - tags: - - { name: 'serializer.normalizer', priority: 64 } + + # note: the autowiring for serializers and normalizers is declared + # into ../services.yaml - Chill\MainBundle\Serializer\Normalizer\AddressNormalizer: + Chill\MainBundle\Serializer\Normalizer\DoctrineExistingEntityNormalizer: + autowire: true tags: - - { name: 'serializer.normalizer', priority: 64 } + - { name: 'serializer.normalizer', priority: 8 } - Chill\MainBundle\Serializer\Normalizer\DateNormalizer: - tags: - - { name: 'serializer.normalizer', priority: 64 } - - Chill\MainBundle\Serializer\Normalizer\UserNormalizer: - tags: - - { name: 'serializer.normalizer', priority: 64 } - - Chill\MainBundle\Serializer\Normalizer\CollectionNormalizer: - tags: - - { name: 'serializer.normalizer', priority: 64 }