diff --git a/src/Symfony/Component/Serializer/Command/DebugCommand.php b/src/Symfony/Component/Serializer/Command/DebugCommand.php index c85ee213e7f68..d2c404898e702 100644 --- a/src/Symfony/Component/Serializer/Command/DebugCommand.php +++ b/src/Symfony/Component/Serializer/Command/DebugCommand.php @@ -97,6 +97,9 @@ private function getAttributesData(ClassMetadataInterface $classMetadata): array { $data = []; + $mapping = $classMetadata->getClassDiscriminatorMapping(); + $typeProperty = $mapping?->getTypeProperty(); + foreach ($classMetadata->getAttributesMetadata() as $attributeMetadata) { $data[$attributeMetadata->getName()] = [ 'groups' => $attributeMetadata->getGroups(), @@ -107,6 +110,10 @@ private function getAttributesData(ClassMetadataInterface $classMetadata): array 'normalizationContexts' => $attributeMetadata->getNormalizationContexts(), 'denormalizationContexts' => $attributeMetadata->getDenormalizationContexts(), ]; + + if ($mapping && $typeProperty === $attributeMetadata->getName()) { + $data[$attributeMetadata->getName()]['discriminatorMap'] = $mapping->getTypesMapping(); + } } return $data; diff --git a/src/Symfony/Component/Serializer/Tests/Command/DebugCommandTest.php b/src/Symfony/Component/Serializer/Tests/Command/DebugCommandTest.php index 7bfdf93ddd55c..01caca0c01cfb 100644 --- a/src/Symfony/Component/Serializer/Tests/Command/DebugCommandTest.php +++ b/src/Symfony/Component/Serializer/Tests/Command/DebugCommandTest.php @@ -17,6 +17,7 @@ use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface; use Symfony\Component\Serializer\Mapping\Loader\AttributeLoader; +use Symfony\Component\Serializer\Tests\Dummy\DummyClassWithDiscriminatorMap; use Symfony\Component\Serializer\Tests\Dummy\DummyClassOne; /** @@ -79,6 +80,41 @@ public function testOutputWithClassArgument() ); } + public function testOutputWithDiscriminatorMapClass() + { + $command = new DebugCommand(new ClassMetadataFactory(new AttributeLoader())); + + $tester = new CommandTester($command); + $tester->execute(['class' => DummyClassWithDiscriminatorMap::class], ['decorated' => false]); + + $this->assertSame(<< [], | + | | "maxDepth" => null, | + | | "serializedName" => null, | + | | "serializedPath" => null, | + | | "ignore" => false, | + | | "normalizationContexts" => [], | + | | "denormalizationContexts" => [], | + | | "discriminatorMap" => [ | + | | "one" => "Symfony\Component\Serializer\Tests\Dummy\DummyClassOne", | + | | "two" => "Symfony\Component\Serializer\Tests\Dummy\DummyClassTwo" | + | | ] | + | | ] | + +----------+------------------------------------------------------------------------+ + + TXT, + $tester->getDisplay(true), + ); + } + public function testOutputWithInvalidClassArgument() { $serializer = $this->createMock(ClassMetadataFactoryInterface::class); diff --git a/src/Symfony/Component/Serializer/Tests/Dummy/DummyClassTwo.php b/src/Symfony/Component/Serializer/Tests/Dummy/DummyClassTwo.php new file mode 100644 index 0000000000000..8bb5311e1f7b8 --- /dev/null +++ b/src/Symfony/Component/Serializer/Tests/Dummy/DummyClassTwo.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Tests\Dummy; + +class DummyClassTwo +{ +} diff --git a/src/Symfony/Component/Serializer/Tests/Dummy/DummyClassWithDiscriminatorMap.php b/src/Symfony/Component/Serializer/Tests/Dummy/DummyClassWithDiscriminatorMap.php new file mode 100644 index 0000000000000..50044bf24b21e --- /dev/null +++ b/src/Symfony/Component/Serializer/Tests/Dummy/DummyClassWithDiscriminatorMap.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Tests\Dummy; + +use Symfony\Component\Serializer\Attribute\DiscriminatorMap; + +#[DiscriminatorMap(typeProperty: 'type', mapping: [ + 'one' => DummyClassOne::class, + 'two' => DummyClassTwo::class, +])] +class DummyClassWithDiscriminatorMap +{ + public string $type; +}