From 8c1e746a659c5fcdd193c1498bf62377290ce248 Mon Sep 17 00:00:00 2001 From: Oleg Zhulnev Date: Fri, 3 Dec 2021 17:43:16 +0300 Subject: [PATCH] [Validator] Allow Sequence constraint to be applied onto class as an attribute --- .../Component/Validator/Constraints/Sequentially.php | 2 +- .../Validator/Tests/Fixtures/Annotation/Entity.php | 3 +++ .../Validator/Tests/Fixtures/Attribute/Entity.php | 5 +++++ .../Validator/Tests/Fixtures/NestedAttribute/Entity.php | 3 +++ .../Tests/Mapping/Loader/AnnotationLoaderTest.php | 7 +++++++ 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Constraints/Sequentially.php b/src/Symfony/Component/Validator/Constraints/Sequentially.php index 53a0a3b912050..36a801a4e28c0 100644 --- a/src/Symfony/Component/Validator/Constraints/Sequentially.php +++ b/src/Symfony/Component/Validator/Constraints/Sequentially.php @@ -20,7 +20,7 @@ * * @author Maxime Steinhausser */ -#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] class Sequentially extends Composite { public $constraints = []; diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/Annotation/Entity.php b/src/Symfony/Component/Validator/Tests/Fixtures/Annotation/Entity.php index 0e07611b0f260..d4a3f4f71e8f7 100644 --- a/src/Symfony/Component/Validator/Tests/Fixtures/Annotation/Entity.php +++ b/src/Symfony/Component/Validator/Tests/Fixtures/Annotation/Entity.php @@ -19,6 +19,9 @@ * @Symfony\Component\Validator\Tests\Fixtures\ConstraintA * @Assert\GroupSequence({"Foo", "Entity"}) * @Assert\Callback({"Symfony\Component\Validator\Tests\Fixtures\CallbackClass", "callback"}) + * @Assert\Sequentially({ + * @Assert\Expression("this.getFirstName() != null") + * }) */ class Entity extends EntityParent implements EntityInterfaceB { diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/Attribute/Entity.php b/src/Symfony/Component/Validator/Tests/Fixtures/Attribute/Entity.php index bb069b49e0ddf..00bcf5fb4badb 100644 --- a/src/Symfony/Component/Validator/Tests/Fixtures/Attribute/Entity.php +++ b/src/Symfony/Component/Validator/Tests/Fixtures/Attribute/Entity.php @@ -22,6 +22,11 @@ Assert\GroupSequence(['Foo', 'Entity']), Assert\Callback([CallbackClass::class, 'callback']), ] +/** + * @Assert\Sequentially({ + * @Assert\Expression("this.getFirstName() != null") + * }) + */ class Entity extends EntityParent implements EntityInterfaceB { /** diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/NestedAttribute/Entity.php b/src/Symfony/Component/Validator/Tests/Fixtures/NestedAttribute/Entity.php index c55796824a800..8555cdb81dc2b 100644 --- a/src/Symfony/Component/Validator/Tests/Fixtures/NestedAttribute/Entity.php +++ b/src/Symfony/Component/Validator/Tests/Fixtures/NestedAttribute/Entity.php @@ -22,6 +22,9 @@ ConstraintA, Assert\GroupSequence(['Foo', 'Entity']), Assert\Callback([CallbackClass::class, 'callback']), + Assert\Sequentially([ + new Assert\Expression('this.getFirstName() != null') + ]) ] class Entity extends EntityParent implements EntityInterfaceB { diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php index 93638412b1263..ab0f79663562e 100644 --- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php +++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/AnnotationLoaderTest.php @@ -19,6 +19,7 @@ use Symfony\Component\Validator\Constraints\Choice; use Symfony\Component\Validator\Constraints\Collection; use Symfony\Component\Validator\Constraints\Email; +use Symfony\Component\Validator\Constraints\Expression; use Symfony\Component\Validator\Constraints\IsTrue; use Symfony\Component\Validator\Constraints\NotBlank; use Symfony\Component\Validator\Constraints\NotNull; @@ -65,6 +66,9 @@ public function testLoadClassMetadata(string $namespace) $expected->setGroupSequence(['Foo', 'Entity']); $expected->addConstraint(new ConstraintA()); $expected->addConstraint(new Callback(['Symfony\Component\Validator\Tests\Fixtures\CallbackClass', 'callback'])); + $expected->addConstraint(new Sequentially([ + new Expression('this.getFirstName() != null'), + ])); $expected->addConstraint(new Callback(['callback' => 'validateMe', 'payload' => 'foo'])); $expected->addConstraint(new Callback('validateMeStatic')); $expected->addPropertyConstraint('firstName', new NotNull()); @@ -151,6 +155,9 @@ public function testLoadClassMetadataAndMerge(string $namespace) $expected->setGroupSequence(['Foo', 'Entity']); $expected->addConstraint(new ConstraintA()); $expected->addConstraint(new Callback(['Symfony\Component\Validator\Tests\Fixtures\CallbackClass', 'callback'])); + $expected->addConstraint(new Sequentially([ + new Expression('this.getFirstName() != null'), + ])); $expected->addConstraint(new Callback(['callback' => 'validateMe', 'payload' => 'foo'])); $expected->addConstraint(new Callback('validateMeStatic')); $expected->addPropertyConstraint('firstName', new NotNull()); 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