From ebbe722068bb653889a82758c0fc08e252a50aa2 Mon Sep 17 00:00:00 2001 From: Tobias Feijten Date: Tue, 3 May 2022 20:34:00 +0200 Subject: [PATCH] [Validator] Fix traverse option on Valid constraint when used as Attribute --- .../Component/Validator/Constraints/Valid.php | 7 ++++ .../Validator/Tests/Constraints/ValidTest.php | 32 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/Symfony/Component/Validator/Constraints/Valid.php b/src/Symfony/Component/Validator/Constraints/Valid.php index 9ee69fdd47bc1..e0000632012eb 100644 --- a/src/Symfony/Component/Validator/Constraints/Valid.php +++ b/src/Symfony/Component/Validator/Constraints/Valid.php @@ -24,6 +24,13 @@ class Valid extends Constraint { public $traverse = true; + public function __construct(array $options = null, array $groups = null, $payload = null, bool $traverse = null) + { + parent::__construct($options ?? [], $groups, $payload); + + $this->traverse = $traverse ?? $this->traverse; + } + public function __get(string $option) { if ('groups' === $option) { diff --git a/src/Symfony/Component/Validator/Tests/Constraints/ValidTest.php b/src/Symfony/Component/Validator/Tests/Constraints/ValidTest.php index 7245dc90adeda..7684a6660f72f 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/ValidTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/ValidTest.php @@ -13,6 +13,8 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Validator\Constraints\Valid; +use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader; /** * @author Bernhard Schussek @@ -32,4 +34,34 @@ public function testGroupsAreNullByDefault() $this->assertNull($constraint->groups); } + + /** + * @requires PHP 8 + */ + public function testAttributes() + { + $metadata = new ClassMetaData(ValidDummy::class); + $loader = new AnnotationLoader(); + self::assertTrue($loader->loadClassMetadata($metadata)); + + [$bConstraint] = $metadata->properties['b']->getConstraints(); + self::assertFalse($bConstraint->traverse); + self::assertSame(['traverse_group'], $bConstraint->groups); + + [$cConstraint] = $metadata->properties['c']->getConstraints(); + self::assertSame(['my_group'], $cConstraint->groups); + self::assertSame('some attached data', $cConstraint->payload); + } +} + +class ValidDummy +{ + #[Valid] + private $a; + + #[Valid(groups: ['traverse_group'], traverse: false)] // Needs a group to work at all for this test + private $b; + + #[Valid(groups: ['my_group'], payload: 'some attached data')] + private $c; } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy