finalize normalization on ressources

This commit is contained in:
2022-03-21 17:33:01 +01:00
parent b4add2de95
commit 169d4dc41c
6 changed files with 40 additions and 22 deletions

View File

@@ -24,6 +24,7 @@ use Chill\PersonBundle\Templating\Entity\PersonRenderInterface;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Serializer\Exception\UnexpectedValueException;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
@@ -40,10 +41,10 @@ class PersonDocGenNormalizer implements
private PersonRenderInterface $personRender;
private RelationshipRepository $relationshipRepository;
private PersonResourceRepository $personResourceRepository;
private RelationshipRepository $relationshipRepository;
private TranslatableStringHelper $translatableStringHelper;
private TranslatorInterface $translator;
@@ -68,6 +69,15 @@ class PersonDocGenNormalizer implements
$dateContext = $context;
$dateContext['docgen:expects'] = DateTimeInterface::class;
$addressContext = array_merge($context, ['docgen:expects' => Address::class]);
$personResourceContext = array_merge($context, [
'docgen:expects' => Person\PersonResource::class,
// we simplify the list of attributes for the embedded persons
AbstractNormalizer::GROUPS => ['docgen:read'],
// when a person reference the same person... take care of circulare references
AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
return $this->normalize(null, $format, $context);
},
]);
if (null === $person) {
return $this->normalizeNullValue($format, $context);
@@ -109,7 +119,7 @@ class PersonDocGenNormalizer implements
'memo' => $person->getMemo(),
'numberOfChildren' => (string) $person->getNumberOfChildren(),
'address' => $this->normalizer->normalize($person->getCurrentPersonAddress(), $format, $addressContext),
'resources' => $this->personResourceRepository->findBy(['personOwner' => $person]),
'resources' => $this->normalizer->normalize($this->personResourceRepository->findBy(['personOwner' => $person]), $format, $personResourceContext),
];
if ($context['docgen:person:with-household'] ?? false) {