. */ namespace App\Serializer; use App\Entity\Base\AbstractStructuralDBElement; use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; /** * @see \App\Tests\Serializer\StructuralElementNormalizerTest */ class StructuralElementNormalizer implements NormalizerInterface { public function __construct( #[Autowire(service: ObjectNormalizer::class)]private readonly NormalizerInterface $normalizer ) { } public function supportsNormalization($data, ?string $format = null, array $context = []): bool { //Only normalize if we are doing a file export operation if (!($context['partdb_export'] ?? false)) { return false; } return $data instanceof AbstractStructuralDBElement; } public function normalize($object, ?string $format = null, array $context = []): mixed { if (!$object instanceof AbstractStructuralDBElement) { throw new \InvalidArgumentException('This normalizer only supports AbstractStructural objects!'); } $data = $this->normalizer->normalize($object, $format, $context); //If the data is not an array, we can't do anything with it if (!is_array($data)) { return $data; } //Remove type field for CSV export if ($format === 'csv') { unset($data['type']); } $data['full_name'] = $object->getFullPath('->'); return $data; } /** * @return bool[] */ public function getSupportedTypes(?string $format): array { return [ AbstractStructuralDBElement::class => true, ]; } }