|
|
@@ -0,0 +1,63 @@
|
|
|
+<?php
|
|
|
+declare(strict_types=1);
|
|
|
+
|
|
|
+namespace App\Serializer;
|
|
|
+
|
|
|
+use App\Entity\Access\Access;
|
|
|
+use App\Service\Utils\EntityUtils;
|
|
|
+use Symfony\Component\Security\Core\Security;
|
|
|
+use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
|
|
|
+use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
|
|
+use Symfony\Component\Serializer\SerializerAwareInterface;
|
|
|
+use Symfony\Component\Serializer\SerializerInterface;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Serializer par défaut
|
|
|
+ */
|
|
|
+final class DefaultNormalizer implements NormalizerInterface, DenormalizerInterface, SerializerAwareInterface
|
|
|
+{
|
|
|
+ public function __construct(
|
|
|
+ private NormalizerInterface $decorated,
|
|
|
+ private EntityUtils $entityUtils,
|
|
|
+ private Security $security
|
|
|
+ )
|
|
|
+ {
|
|
|
+ if (!$this->decorated instanceof DenormalizerInterface) {
|
|
|
+ throw new \InvalidArgumentException(sprintf('The decorated normalizer must implement the %s.', DenormalizerInterface::class));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function supportsNormalization($data, $format = null)
|
|
|
+ {
|
|
|
+ return $this->decorated->supportsNormalization($data, $format);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function normalize($object, $format = null, array $context = [])
|
|
|
+ {
|
|
|
+ $data = $this->decorated->normalize($object, $format, $context);
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function supportsDenormalization($data, $type, $format = null)
|
|
|
+ {
|
|
|
+ return $this->decorated->supportsDenormalization($data, $type, $format);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function denormalize($data, $class, $format = null, array $context = [])
|
|
|
+ {
|
|
|
+ $entity = $this->decorated->denormalize($data, $class, $format, $context);
|
|
|
+
|
|
|
+ /** @var Access $access */
|
|
|
+ $access = $this->security->getUser();
|
|
|
+ $this->entityUtils->defaultValueSettersByAccess($entity, $access);
|
|
|
+
|
|
|
+ return $entity;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function setSerializer(SerializerInterface $serializer)
|
|
|
+ {
|
|
|
+ if($this->decorated instanceof SerializerAwareInterface) {
|
|
|
+ $this->decorated->setSerializer($serializer);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|