diff --git a/src/Symfony/Component/Validator/Command/DebugCommand.php b/src/Symfony/Component/Validator/Command/DebugCommand.php index be2c3fe96337..bd892c5ecb32 100644 --- a/src/Symfony/Component/Validator/Command/DebugCommand.php +++ b/src/Symfony/Component/Validator/Command/DebugCommand.php @@ -22,8 +22,12 @@ use Symfony\Component\Finder\Exception\DirectoryNotFoundException; use Symfony\Component\Finder\Finder; use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\Mapping\AutoMappingStrategy; +use Symfony\Component\Validator\Mapping\CascadingStrategy; use Symfony\Component\Validator\Mapping\ClassMetadataInterface; use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface; +use Symfony\Component\Validator\Mapping\GenericMetadata; +use Symfony\Component\Validator\Mapping\TraversalStrategy; /** * A console command to debug Validators information. @@ -161,6 +165,31 @@ private function getPropertyData(ClassMetadataInterface $classMetadata, string $ $propertyMetadata = $classMetadata->getPropertyMetadata($constrainedProperty); foreach ($propertyMetadata as $metadata) { + $autoMapingStrategy = 'Not supported'; + if ($metadata instanceof GenericMetadata) { + switch ($metadata->getAutoMappingStrategy()) { + case AutoMappingStrategy::ENABLED: $autoMapingStrategy = 'Enabled'; break; + case AutoMappingStrategy::DISABLED: $autoMapingStrategy = 'Disabled'; break; + case AutoMappingStrategy::NONE: $autoMapingStrategy = 'None'; break; + } + } + $traversalStrategy = 'None'; + if (TraversalStrategy::TRAVERSE === $metadata->getTraversalStrategy()) { + $traversalStrategy = 'Traverse'; + } + if (TraversalStrategy::IMPLICIT === $metadata->getTraversalStrategy()) { + $traversalStrategy = 'Implicit'; + } + + $data[] = [ + 'class' => 'property options', + 'groups' => [], + 'options' => [ + 'cascadeStrategy' => CascadingStrategy::CASCADE === $metadata->getCascadingStrategy() ? 'Cascade' : 'None', + 'autoMappingStrategy' => $autoMapingStrategy, + 'traversalStrategy' => $traversalStrategy, + ], + ]; foreach ($metadata->getConstraints() as $constraint) { $data[] = [ 'class' => \get_class($constraint), diff --git a/src/Symfony/Component/Validator/Tests/Command/DebugCommandTest.php b/src/Symfony/Component/Validator/Tests/Command/DebugCommandTest.php index 87cfc68b8999..54dcb07cb08b 100644 --- a/src/Symfony/Component/Validator/Tests/Command/DebugCommandTest.php +++ b/src/Symfony/Component/Validator/Tests/Command/DebugCommandTest.php @@ -37,28 +37,43 @@ public function testOutputWithClassArgument() Symfony\Component\Validator\Tests\Dummy\DummyClassOne ----------------------------------------------------- -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ -| Property | Name | Groups | Options | -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ -| - | Symfony\Component\Validator\Constraints\Expression | Default, DummyClassOne | [ | -| | | | "expression" => "1 + 1 = 2", | -| | | | "message" => "This value is not valid.", | -| | | | "payload" => null, | -| | | | "values" => [] | -| | | | ] | -| code | Symfony\Component\Validator\Constraints\NotBlank | Default, DummyClassOne | [ | -| | | | "allowNull" => false, | -| | | | "message" => "This value should not be blank.", | -| | | | "normalizer" => null, | -| | | | "payload" => null | -| | | | ] | -| email | Symfony\Component\Validator\Constraints\Email | Default, DummyClassOne | [ | -| | | | "message" => "This value is not a valid email address.", | -| | | | "mode" => null, | -| | | | "normalizer" => null, | -| | | | "payload" => null | -| | | | ] | -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ +| Property | Name | Groups | Options | ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ +| - | Symfony\Component\Validator\Constraints\Expression | Default, DummyClassOne | [ | +| | | | "expression" => "1 + 1 = 2", | +| | | | "message" => "This value is not valid.", | +| | | | "payload" => null, | +| | | | "values" => [] | +| | | | ] | +| code | property options | | [ | +| | | | "cascadeStrategy" => "None", | +| | | | "autoMappingStrategy" => "None", | +| | | | "traversalStrategy" => "None" | +| | | | ] | +| code | Symfony\Component\Validator\Constraints\NotBlank | Default, DummyClassOne | [ | +| | | | "allowNull" => false, | +| | | | "message" => "This value should not be blank.", | +| | | | "normalizer" => null, | +| | | | "payload" => null | +| | | | ] | +| email | property options | | [ | +| | | | "cascadeStrategy" => "None", | +| | | | "autoMappingStrategy" => "None", | +| | | | "traversalStrategy" => "None" | +| | | | ] | +| email | Symfony\Component\Validator\Constraints\Email | Default, DummyClassOne | [ | +| | | | "message" => "This value is not a valid email address.", | +| | | | "mode" => null, | +| | | | "normalizer" => null, | +| | | | "payload" => null | +| | | | ] | +| dummyClassTwo | property options | | [ | +| | | | "cascadeStrategy" => "Cascade", | +| | | | "autoMappingStrategy" => "None", | +| | | | "traversalStrategy" => "Implicit" | +| | | | ] | ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ TXT , $tester->getDisplay(true) @@ -77,54 +92,84 @@ public function testOutputWithPathArgument() Symfony\Component\Validator\Tests\Dummy\DummyClassOne ----------------------------------------------------- -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ -| Property | Name | Groups | Options | -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ -| - | Symfony\Component\Validator\Constraints\Expression | Default, DummyClassOne | [ | -| | | | "expression" => "1 + 1 = 2", | -| | | | "message" => "This value is not valid.", | -| | | | "payload" => null, | -| | | | "values" => [] | -| | | | ] | -| code | Symfony\Component\Validator\Constraints\NotBlank | Default, DummyClassOne | [ | -| | | | "allowNull" => false, | -| | | | "message" => "This value should not be blank.", | -| | | | "normalizer" => null, | -| | | | "payload" => null | -| | | | ] | -| email | Symfony\Component\Validator\Constraints\Email | Default, DummyClassOne | [ | -| | | | "message" => "This value is not a valid email address.", | -| | | | "mode" => null, | -| | | | "normalizer" => null, | -| | | | "payload" => null | -| | | | ] | -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ +| Property | Name | Groups | Options | ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ +| - | Symfony\Component\Validator\Constraints\Expression | Default, DummyClassOne | [ | +| | | | "expression" => "1 + 1 = 2", | +| | | | "message" => "This value is not valid.", | +| | | | "payload" => null, | +| | | | "values" => [] | +| | | | ] | +| code | property options | | [ | +| | | | "cascadeStrategy" => "None", | +| | | | "autoMappingStrategy" => "None", | +| | | | "traversalStrategy" => "None" | +| | | | ] | +| code | Symfony\Component\Validator\Constraints\NotBlank | Default, DummyClassOne | [ | +| | | | "allowNull" => false, | +| | | | "message" => "This value should not be blank.", | +| | | | "normalizer" => null, | +| | | | "payload" => null | +| | | | ] | +| email | property options | | [ | +| | | | "cascadeStrategy" => "None", | +| | | | "autoMappingStrategy" => "None", | +| | | | "traversalStrategy" => "None" | +| | | | ] | +| email | Symfony\Component\Validator\Constraints\Email | Default, DummyClassOne | [ | +| | | | "message" => "This value is not a valid email address.", | +| | | | "mode" => null, | +| | | | "normalizer" => null, | +| | | | "payload" => null | +| | | | ] | +| dummyClassTwo | property options | | [ | +| | | | "cascadeStrategy" => "Cascade", | +| | | | "autoMappingStrategy" => "None", | +| | | | "traversalStrategy" => "Implicit" | +| | | | ] | ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ Symfony\Component\Validator\Tests\Dummy\DummyClassTwo ----------------------------------------------------- -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ -| Property | Name | Groups | Options | -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ -| - | Symfony\Component\Validator\Constraints\Expression | Default, DummyClassTwo | [ | -| | | | "expression" => "1 + 1 = 2", | -| | | | "message" => "This value is not valid.", | -| | | | "payload" => null, | -| | | | "values" => [] | -| | | | ] | -| code | Symfony\Component\Validator\Constraints\NotBlank | Default, DummyClassTwo | [ | -| | | | "allowNull" => false, | -| | | | "message" => "This value should not be blank.", | -| | | | "normalizer" => null, | -| | | | "payload" => null | -| | | | ] | -| email | Symfony\Component\Validator\Constraints\Email | Default, DummyClassTwo | [ | -| | | | "message" => "This value is not a valid email address.", | -| | | | "mode" => null, | -| | | | "normalizer" => null, | -| | | | "payload" => null | -| | | | ] | -+----------+----------------------------------------------------+------------------------+------------------------------------------------------------+ ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ +| Property | Name | Groups | Options | ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ +| - | Symfony\Component\Validator\Constraints\Expression | Default, DummyClassTwo | [ | +| | | | "expression" => "1 + 1 = 2", | +| | | | "message" => "This value is not valid.", | +| | | | "payload" => null, | +| | | | "values" => [] | +| | | | ] | +| code | property options | | [ | +| | | | "cascadeStrategy" => "None", | +| | | | "autoMappingStrategy" => "None", | +| | | | "traversalStrategy" => "None" | +| | | | ] | +| code | Symfony\Component\Validator\Constraints\NotBlank | Default, DummyClassTwo | [ | +| | | | "allowNull" => false, | +| | | | "message" => "This value should not be blank.", | +| | | | "normalizer" => null, | +| | | | "payload" => null | +| | | | ] | +| email | property options | | [ | +| | | | "cascadeStrategy" => "None", | +| | | | "autoMappingStrategy" => "None", | +| | | | "traversalStrategy" => "None" | +| | | | ] | +| email | Symfony\Component\Validator\Constraints\Email | Default, DummyClassTwo | [ | +| | | | "message" => "This value is not a valid email address.", | +| | | | "mode" => null, | +| | | | "normalizer" => null, | +| | | | "payload" => null | +| | | | ] | +| dummyClassOne | property options | | [ | +| | | | "cascadeStrategy" => "None", | +| | | | "autoMappingStrategy" => "Disabled", | +| | | | "traversalStrategy" => "None" | +| | | | ] | ++---------------+----------------------------------------------------+------------------------+------------------------------------------------------------+ TXT , $tester->getDisplay(true) diff --git a/src/Symfony/Component/Validator/Tests/Dummy/DummyClassOne.php b/src/Symfony/Component/Validator/Tests/Dummy/DummyClassOne.php index 92def37e0e9f..169034fefceb 100644 --- a/src/Symfony/Component/Validator/Tests/Dummy/DummyClassOne.php +++ b/src/Symfony/Component/Validator/Tests/Dummy/DummyClassOne.php @@ -31,4 +31,11 @@ class DummyClassOne * @Assert\Email */ public $email; + + /** + * @var DummyClassTwo|null + * + * @Assert\Valid() + */ + public $dummyClassTwo; } diff --git a/src/Symfony/Component/Validator/Tests/Dummy/DummyClassTwo.php b/src/Symfony/Component/Validator/Tests/Dummy/DummyClassTwo.php index cd136a9dd301..01bc5fed873e 100644 --- a/src/Symfony/Component/Validator/Tests/Dummy/DummyClassTwo.php +++ b/src/Symfony/Component/Validator/Tests/Dummy/DummyClassTwo.php @@ -31,4 +31,11 @@ class DummyClassTwo * @Assert\Email */ public $email; + + /** + * @var DummyClassOne|null + * + * @Assert\DisableAutoMapping() + */ + public $dummyClassOne; }
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: