normalizer->normalize($object, $format, array_merge( $context, [self::IGNORE_WORK => spl_object_hash($object)] )); // due to bug: https://api-platform.com/docs/core/serialization/#collection-relation // and also: https://github.com/symfony/symfony/issues/36965 // we have to rewrite the evaluations as a collection $initial['accompanyingPeriodWorkEvaluations'] = $this->normalizer->normalize( $object->getAccompanyingPeriodWorkEvaluations()->getValues(), $format, $context ); // add the referrers $initial['referrers'] = []; foreach ($object->getReferrersHistory() as $referrerHistory) { if (null !== $referrerHistory->getEndDate()) { continue; } $initial['referrers'][] = $this->normalizer->normalize( $referrerHistory->getUser(), $format, [...$context, UserNormalizer::AT_DATE => $referrerHistory->getStartDate()] ); } if ('json' === $format) { // then, we add normalization for things which are not into the entity $initial['workflows_availables'] = $this->metadataExtractor->availableWorkflowFor( AccompanyingPeriodWork::class, $object->getId() ); $initial['workflows_availables_evaluation'] = $this->metadataExtractor->availableWorkflowFor( AccompanyingPeriodWorkEvaluation::class ); $initial['workflows_availables_evaluation_documents'] = $this->metadataExtractor->availableWorkflowFor( AccompanyingPeriodWorkEvaluationDocument::class ); $workflows = $this->entityWorkflowRepository->findBy([ 'relatedEntityClass' => AccompanyingPeriodWork::class, 'relatedEntityId' => $object->getId(), ]); $initial['workflows'] = $this->normalizer->normalize($workflows, 'json', $context); } return $initial; } public function supportsNormalization($data, ?string $format = null, array $context = []): bool { return ('json' === $format || 'docgen' === $format) && ($data instanceof AccompanyingPeriodWork || ('docgen' === $format && null === $data && ($context['docgen:expects'] ?? null) === AccompanyingPeriodWork::class)) && !\array_key_exists(self::IGNORE_WORK, $context); } }