From 2ccc6f1976bcad1f95c8b956fcdd535d9f4474fd Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Tue, 25 Jan 2022 14:43:51 +0100 Subject: [PATCH] fix backend error of data transformer --- .../EntityToJsonTransformer.php | 29 +++++++++++++++++-- .../{person-input.js => showhide-input.js} | 0 2 files changed, 27 insertions(+), 2 deletions(-) rename src/Bundle/ChillPersonBundle/Resources/public/page/person_resource/{person-input.js => showhide-input.js} (100%) diff --git a/src/Bundle/ChillMainBundle/Form/Type/DataTransformer/EntityToJsonTransformer.php b/src/Bundle/ChillMainBundle/Form/Type/DataTransformer/EntityToJsonTransformer.php index 7ff68b13a..85030606d 100644 --- a/src/Bundle/ChillMainBundle/Form/Type/DataTransformer/EntityToJsonTransformer.php +++ b/src/Bundle/ChillMainBundle/Form/Type/DataTransformer/EntityToJsonTransformer.php @@ -12,11 +12,16 @@ declare(strict_types=1); namespace Chill\MainBundle\Form\Type\DataTransformer; use Chill\MainBundle\Entity\User; +use Chill\PersonBundle\Entity\Person; +use Chill\ThirdPartyBundle\Entity\ThirdParty; use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Exception\TransformationFailedException; +use Symfony\Component\Serializer\Exception\UnexpectedValueException as ExceptionUnexpectedValueException; use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\SerializerInterface; +use UnexpectedValueException; + use function array_key_exists; class EntityToJsonTransformer implements DataTransformerInterface @@ -41,6 +46,8 @@ class EntityToJsonTransformer implements DataTransformerInterface { $denormalized = json_decode($value, true); + dump($value); + if ($this->multiple) { if (null === $denormalized) { return []; @@ -52,6 +59,10 @@ class EntityToJsonTransformer implements DataTransformerInterface ); } + if ($value === '') { + return null; + } + return $this->denormalizeOne($denormalized); } @@ -69,7 +80,7 @@ class EntityToJsonTransformer implements DataTransformerInterface ]); } - private function denormalizeOne(array $item): User + private function denormalizeOne(array $item) { if (!array_key_exists('type', $item)) { throw new TransformationFailedException('the key "type" is missing on element'); @@ -79,10 +90,24 @@ class EntityToJsonTransformer implements DataTransformerInterface throw new TransformationFailedException('the key "id" is missing on element'); } + switch ($this->type) { + case 'user': + $class = User::class; + break; + case 'person': + $class = Person::class; + break; + case 'thirdparty': + $class = ThirdParty::class; + break; + default: + throw new \UnexpectedValueException('This type is not supported'); + } + return $this->denormalizer->denormalize( ['type' => $item['type'], 'id' => $item['id']], - $this->type, + $class, 'json', [AbstractNormalizer::GROUPS => ['read']], ); diff --git a/src/Bundle/ChillPersonBundle/Resources/public/page/person_resource/person-input.js b/src/Bundle/ChillPersonBundle/Resources/public/page/person_resource/showhide-input.js similarity index 100% rename from src/Bundle/ChillPersonBundle/Resources/public/page/person_resource/person-input.js rename to src/Bundle/ChillPersonBundle/Resources/public/page/person_resource/showhide-input.js