. */ namespace App\Serializer; use App\Entity\Base\AbstractStructuralDBElement; use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface; use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface; use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait; 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; } /** * @return array */ public function normalize($object, string $format = null, array $context = []) { if (!$object instanceof AbstractStructuralDBElement) { throw new \InvalidArgumentException('This normalizer only supports AbstractStructural objects!'); } $data = $this->normalizer->normalize($object, $format, $context); //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, ]; } }