8000 Add GroupProviderInterface · symfony/symfony@d21df03 · GitHub
[go: up one dir, main page]

Skip to content

Commit d21df03

Browse files
committed
Add GroupProviderInterface
1 parent 5f0a94b commit d21df03

31 files changed

+191
-162
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/UnusedTagsPass.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class UnusedTagsPass implements CompilerPassInterface
101101
'twig.runtime',
102102
'validator.auto_mapper',
103103
'validator.constraint_validator',
104-
'validator.group_sequence_provider',
104+
'validator.group_provider',
105105
'validator.initializer',
106106
'workflow',
107107
];

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@
184184
use Symfony\Component\Uid\UuidV4;
185185
use Symfony\Component\Validator\Constraints\WhenValidator;
186186
use Symfony\Component\Validator\ConstraintValidatorInterface;
187+
use Symfony\Component\Validator\GroupProviderInterface;
187188
use Symfony\Component\Validator\GroupSequenceProviderInterface;
188189
use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader;
189190
use Symfony\Component\Validator\ObjectInitializerInterface;
@@ -670,8 +671,8 @@ public function load(array $configs, ContainerBuilder $container)
670671
->addTag('serializer.normalizer');
671672
$container->registerForAutoconfiguration(ConstraintValidatorInterface::class)
672673
->addTag('validator.constraint_validator');
673-
$container->registerForAutoconfiguration(GroupSequenceProviderInterface::class)
674-
->addTag('validator.group_sequence_provider');
674+
$container->registerForAutoconfiguration(GroupProviderInterface::class)
675+
->addTag('validator.group_provider');
675676
$container->registerForAutoconfiguration(ObjectInitializerInterface::class)
676677
->addTag('validator.initializer');
677678
$container->registerForAutoconfiguration(MessageHandlerInterface::class)

src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
use Symfony\Component\Translation\DependencyInjection\TranslatorPathsPass;
6868
use Symfony\Component\Validator\DependencyInjection\AddAutoMappingConfigurationPass;
6969
use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass;
70-
use Symfony\Component\Validator\DependencyInjection\AddGroupSequenceProvidersPass;
70+
use Symfony\Component\Validator\DependencyInjection\AddGroupProvidersPass;
7171
use Symfony\Component\Validator\DependencyInjection\AddValidatorInitializersPass;
7272
use Symfony\Component\VarExporter\Internal\Hydrator;
7373
use Symfony\Component\VarExporter\Internal\Registry;
@@ -149,7 +149,7 @@ public function build(ContainerBuilder $container)
149149
// but as late as possible to get resolved parameters
150150
$container->addCompilerPass($registerListenersPass, PassConfig::TYPE_BEFORE_REMOVING);
151151
$this->addCompilerPassIfExists($container, AddConstraintValidatorsPass::class);
152-
$this->addCompilerPassIfExists($container, AddGroupSequenceProvidersPass::class);
152+
$this->addCompilerPassIfExists($container, AddGroupProvidersPass::class);
153153
$container->addCompilerPass(new AddAnnotationsCachedReaderPass(), PassConfig::TYPE_AFTER_REMOVING, -255);
154154
$this->addCompilerPassIfExists($container, AddValidatorInitializersPass::class);
155155
$this->addCompilerPassIfExists($container, AddConsoleCommandPass::class, PassConfig::TYPE_BEFORE_REMOVING);

src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
use Symfony\Component\Validator\Constraints\NotCompromisedPasswordValidator;
2121
use Symfony\Component\Validator\Constraints\WhenValidator;
2222
use Symfony\Component\Validator\ContainerConstraintValidatorFactory;
23-
use Symfony\Component\Validator\ContainerGroupSequenceProviderFactory;
23+
use Symfony\Component\Validator\ContainerGroupProviderFactory;
2424
use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader;
2525
use Symfony\Component\Validator\Validation;
2626
use Symfony\Component\Validator\Validator\ValidatorInterface;
@@ -42,8 +42,8 @@
4242
->call('setConstraintValidatorFactory', [
4343
service('validator.validator_factory'),
4444
])
45-
->call('setGroupSequenceProviderFactory', [
46-
service('validator.group_sequence_provider_factory'),
45+
->call('setGroupProviderFactory', [
46+
service('validator.group_provider_factory'),
4747
])
4848
->call('setTranslator', [
4949
service('translator')->ignoreOnInvalid(),
@@ -72,9 +72,9 @@
7272
abstract_arg('Constraint validators locator'),
7373
])
7474

75-
->set('validator.group_sequence_provider_factory', ContainerGroupSequenceProviderFactory::class)
75+
->set('validator.group_provider_factory', ContainerGroupProviderFactory::class)
7676
->args([
77-
abstract_arg('Group sequence provider locator'),
77+
abstract_arg('Group provider locator'),
7878
])
7979

8080
->load('Symfony\Component\Validator\Constraints\\', $validatorsDir.'/*Validator.php')

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
use Symfony\Component\Translation\DependencyInjection\TranslatorPass;
8181
use Symfony\Component\Translation\LocaleSwitcher;
8282
use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass;
83-
use Symfony\Component\Validator\DependencyInjection\AddGroupSequenceProvidersPass;
83+
use Symfony\Component\Validator\DependencyInjection\AddGroupProvidersPass;
8484
use Symfony\Component\Validator\Validation;
8585
use Symfony\Component\Validator\Validator\ValidatorInterface;
8686
use Symfony\Component\Validator\ValidatorBuilder;
@@ -1234,8 +1234,8 @@ public function testValidation()
12341234
$this->assertCount($annotations ? 8 : 7, $calls);
12351235
$this->assertSame('setConstraintValidatorFactory', $calls[0][0]);
12361236
$this->assertEquals([new Reference('validator.validator_factory')], $calls[0][1]);
1237-
$this->assertSame('setGroupSequenceProviderFactory', $calls[1][0]);
1238-
$this->assertEquals([new Reference('validator.group_sequence_provider_factory')], $calls[1][1]);
1237+
$this->assertSame('setGroupProviderFactory', $calls[1][0]);
1238+
$this->assertEquals([new Reference('validator.group_provider_factory')], $calls[1][1]);
12391239
$this->assertSame('setTranslator', $calls[2][0]);
12401240
$this->assertEquals([new Reference('translator', ContainerBuilder::IGNORE_ON_INVALID_REFERENCE)], $calls[2][1]);
12411241
$this->assertSame('setTranslationDomain', $calls[3][0]);
@@ -2385,7 +2385,7 @@ protected function createContainerFromFile(string $file, array $data = [], bool
23852385
$container->getCompilerPassConfig()->setAfterRemovingPasses([]);
23862386
}
23872387
$container->getCompilerPassConfig()->setBeforeOptimizationPasses([new LoggerPass()]);
2388-
$container->getCompilerPassConfig()->setBeforeRemovingPasses([new AddConstraintValidatorsPass(), new AddGroupSequenceProvidersPass(), new TranslatorPass()]);
2388+
$container->getCompilerPassConfig()->setBeforeRemovingPasses([new AddConstraintValidatorsPass(), new AddGroupProvidersPass(), new TranslatorPass()]);
23892389
$container->getCompilerPassConfig()->setAfterRemovingPasses([new AddAnnotationsCachedReaderPass()]);
23902390

23912391
if (!$compile) {

src/Symfony/Component/Validator/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ CHANGELOG
1212
* Deprecate `ValidatorBuilder::addDefaultDoctrineAnnotationReader()`
1313
* Add `number`, `finite-number` and `finite-float` types to `Type` constraint
1414
* Add the `withSeconds` option to the `Time` constraint that allows to pass time without seconds
15-
* Add support for implementing `GroupSequenceProviderInterface` outside of the underlying class
15+
* Add `GroupProviderInterface` to implement validation group providers outside the underlying class
1616

1717
6.3
1818
---

src/Symfony/Component/Validator/ContainerGroupSequenceProviderFactory.php renamed to src/Symfony/Component/Validator/ContainerGroupProviderFactory.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,34 @@
1717
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
1818

1919
/**
20-
* Factory class leveraging a PSR-11 container to create or retrieve instances of group sequence providers.
20+
* Factory class leveraging a PSR-11 container to create or retrieve instances of validation group providers.
2121
*
2222
* @author Yonel Ceruto <yonelceruto@gmail.com>
2323
*/
24-
class ContainerGroupSequenceProviderFactory implements GroupSequenceProviderFactoryInterface
24+
class ContainerGroupProviderFactory implements GroupProviderFactoryInterface
2525
{
2626
private array $providers = [];
2727

2828
public function __construct(private readonly ContainerInterface $container)
2929
{
3030
}
3131

32-
public function getInstance(string $class): GroupSequenceProviderInterface
32+
public function getInstance(string $class): GroupProviderInterface
3333
{
3434
if (!isset($this->providers[$class])) {
3535
if ($this->container->has($class)) {
3636
$this->providers[$class] = $this->container->get($class);
3737
} else {
3838
if (!class_exists($class)) {
39-
throw new GroupDefinitionException(sprintf('Group sequence provider "%s" does not exist or is not enabled as service. Check the "class" option in your constraint class "%s".', $class, GroupSequenceProvider::class));
39+
throw new GroupDefinitionException(sprintf('Group provider "%s" does not exist or is not enabled as service. Check the "class" option in your constraint class "%s".', $class, GroupSequenceProvider::class));
4040
}
4141

4242
$this->providers[$class] = new $class();
4343
}
4444
}
4545

46-
if (!$this->providers[$class] instanceof GroupSequenceProviderInterface) {
47-
throw new UnexpectedTypeException($this->providers[$class], GroupSequenceProviderInterface::class);
46+
if (!$this->providers[$class] instanceof GroupProviderInterface) {
47+
throw new UnexpectedTypeException($this->providers[$class], GroupProviderInterface::class);
4848
}
4949

5050
return $this->providers[$class];

src/Symfony/Component/Validator/DependencyInjection/AddGroupSequenceProvidersPass.php renamed to src/Symfony/Component/Validator/DependencyInjection/AddGroupProvidersPass.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@
1919
/**
2020
* @author Yonel Ceruto <yonelceruto@gmail.com>
2121
*/
22-
class AddGroupSequenceProvidersPass implements CompilerPassInterface
22+
class AddGroupProvidersPass implements CompilerPassInterface
2323
{
2424
public function process(ContainerBuilder $container): void
2525
{
26-
if (!$container->hasDefinition('validator.group_sequence_provider_factory')) {
26+
if (!$container->hasDefinition('validator.group_provider_factory')) {
2727
return;
2828
}
2929

3030
$providers = [];
31-
foreach ($container->findTaggedServiceIds('validator.group_sequence_provider', true) as $id => $attributes) {
31+
foreach ($container->findTaggedServiceIds('validator.group_provider', true) as $id => $attributes) {
3232
$definition = $container->getDefinition($id);
3333

3434
if (isset($attributes[0]['alias'])) {
@@ -39,7 +39,7 @@ public function process(ContainerBuilder $container): void
3939
}
4040

4141
$container
42-
->getDefinition('validator.group_sequence_provider_factory')
42+
->getDefinition('validator.group_provider_factory')
4343
->replaceArgument(0, ServiceLocatorTagPass::register($container, $providers))
4444
;
4545
}

src/Symfony/Component/Validator/GroupSequenceProviderFactory.php renamed to src/Symfony/Component/Validator/GroupProviderFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@
1212
namespace Symfony\Component\Validator;
1313

1414
/**
15-
* Factory class for creating or retrieving instances of group sequence providers.
15+
* Factory class for creating or retrieving instances of validation group providers.
1616
*
1717
* @author Yonel Ceruto <yonelceruto@gmail.com>
1818
*/
19-
class GroupSequenceProviderFactory implements GroupSequenceProviderFactoryInterface
19+
class GroupProviderFactory implements GroupProviderFactoryInterface
2020
{
2121
public function __construct(private array $providers = [])
2222
{
2323
}
2424

25-
public function getInstance(string $class): GroupSequenceProviderInterface
25+
public function getInstance(string $class): GroupProviderInterface
2626
{
2727
return $this->providers[$class] ??= new $class();
2828
}

src/Symfony/Component/Validator/GroupSequenceProviderFactoryInterface.php renamed to src/Symfony/Component/Validator/GroupProviderFactoryInterface.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
namespace Symfony\Component\Validator;
1313

1414
/**
15-
* Handles the creation of group sequence providers.
15+
* Handles the creation of validation group providers.
1616
*
1717
* @author Yonel Ceruto <yonelceruto@gmail.com>
1818
*/
19-
interface GroupSequenceProviderFactoryInterface
19+
interface GroupProviderFactoryInterface
2020
{
21-
public function getInstance(string $class): GroupSequenceProviderInterface;
21+
public function getInstance(string $class): GroupProviderInterface;
2222
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Validator;
13+
14+
use Symfony\Component\Validator\Constraints\GroupSequence;
15+
16+
/**
17+
* Defines the interface for a validation group provider.
18+
*/
19+
interface GroupProviderInterface
20+
{
21+
/**
22+
* Returns which validation groups should be used for a certain state
23+
* of the object.
24+
*
25+
* @return string[]|string[][]|GroupSequence
26+
*/
27+
public function getGroups(object $object): array|GroupSequence;
28+
}

src/Symfony/Component/Validator/Mapping/ClassMetadata.php

+9-9
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ class ClassMetadata extends GenericMetadata implements ClassMetadataInterface
8989
/**
9090
* @internal This property is public in order to reduce the size of the
9191
* class' serialized representation. Do not access it. Use
92-
* {@link getGroupSequenceProviderClass()} instead.
92+
* {@link getGroupProviderClass()} instead.
9393
*/
94-
public ?string $groupSequenceProviderClass = null;
94+
public ?string $groupProviderClass = null;
9595

9696
/**
9797
* The strategy for traversing traversable objects.
@@ -130,7 +130,7 @@ public function __sleep(): array
130130
'getters',
131131
'groupSequence',
132132
'groupSequenceProvider',
133-
'groupSequenceProviderClass',
133+
'groupProviderClass',
134134
'members',
135135
'name',
136136
'properties',
@@ -327,7 +327,7 @@ public function addGetterMethodConstraints(string $property, string $method, arr
327327
public function mergeConstraints(self $source)
328328
{
329329
if ($source->isGroupSequenceProvider()) {
330-
$this->setGroupSequenceProviderClass($source->getGroupSequenceProviderClass());
330+
$this->setGroupProviderClass($source->getGroupProviderClass());
331331
$this->setGroupSequenceProvider(true);
332332
}
333333

@@ -441,7 +441,7 @@ public function setGroupSequenceProvider(bool $active)
441441
throw new GroupDefinitionException('Defining a group sequence provider is not allowed with a static group sequence.');
442442
}
443443

444-
if (null === $this->groupSequenceProviderClass && !$this->getReflectionClass()->implementsInterface(GroupSequenceProviderInterface::class)) {
444+
if (null === $this->groupProviderClass && !$this->getReflectionClass()->implementsInterface(GroupSequenceProviderInterface::class)) {
445445
throw new GroupDefinitionException(sprintf('Class "%s" must implement GroupSequenceProviderInterface.', $this->name));
446446
}
447447

@@ -453,14 +453,14 @@ public function isGroupSequenceProvider(): bool
453453
return $this->groupSequenceProvider;
454454
}
455455

456-
public function setGroupSequenceProviderClass(?string $class): void
456+
public function setGroupProviderClass(?string $class): void
457457
{
458-
$this->groupSequenceProviderClass = $class;
458+
$this->groupProviderClass = $class;
459459
}
460460

461-
public function getGroupSequenceProviderClass(): ?string
461+
public function getGroupProviderClass(): ?string
462462
{
463-
return $this->groupSequenceProviderClass;
463+
return $this->groupProviderClass;
464464
}
465465

466466
public function getCascadingStrategy(): int

src/Symfony/Component/Validator/Mapping/ClassMetadataInterface.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
* @see GroupSequenceProviderInterface
3232
* @see TraversalStrategy
3333
*
34-
* @method string|null getGroupSequenceProviderClass()
34+
* @method string|null getGroupProviderClass()
3535
*/
3636
interface ClassMetadataInterface extends MetadataInterface
3737
{

src/Symfony/Component/Validator/Mapping/Loader/AnnotationLoader.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function loadClassMetadata(ClassMetadata $metadata): bool
5353
if ($constraint instanceof GroupSequence) {
5454
$metadata->setGroupSequence($constraint->groups);
5555
} elseif ($constraint instanceof GroupSequenceProvider) {
56-
$metadata->setGroupSequenceProviderClass($constraint->class);
56+
$metadata->setGroupProviderClass($constraint->class);
5757
$metadata->setGroupSequenceProvider(true);
5858
} elseif ($constraint instanceof Constraint) {
5959
$metadata->addConstraint($constraint);

src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ private function loadClassesFromXml(): void
201201
private function loadClassMetadataFromXml(ClassMetadata $metadata, \SimpleXMLElement $classDescription): void
202202
{
203203
if (\count($classDescription->{'group-sequence-provider'}) > 0) {
204-
$metadata->setGroupSequenceProviderClass($classDescription->{'group-sequence-provider'}[0]->value ?: null);
204+
$metadata->setGroupProviderClass($classDescription->{'group-sequence-provider'}[0]->value ?: null);
205205
$metadata->setGroupSequenceProvider(true);
206206
}
207207

src/Symfony/Component/Validator/Mapping/Loader/YamlFileLoader.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private function loadClassMetadataFromYaml(ClassMetadata $metadata, array $class
151151
{
152152
if (isset($classDescription['group_sequence_provider'])) {
153153
if (\is_string($classDescription['group_sequence_provider'])) {
154-
$metadata->setGroupSequenceProviderClass($classDescription['group_sequence_provider']);
154+
$metadata->setGroupProviderClass($classDescription['group_sequence_provider']);
155155
}
156156
$metadata->setGroupSequenceProvider(
157157
(bool) $classDescription['group_sequence_provider']

src/Symfony/Component/Validator/Tests/Constraints/GroupSequenceProviderTest.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Validator\Constraints\GroupSequenceProvider;
16-
use Symfony\Component\Validator\Tests\Dummy\DummyGroupSequenceProvider;
16+
use Symfony\Component\Validator\Tests\Dummy\DummyGroupProvider;
1717

1818
class GroupSequenceProviderTest extends TestCase
1919
{
2020
public function testCreate()
2121
{
22-
$sequence = new GroupSequenceProvider(['class' => DummyGroupSequenceProvider::class]);
22+
$sequence = new GroupSequenceProvider(['class' => DummyGroupProvider::class]);
2323

24-
$this->assertSame(DummyGroupSequenceProvider::class, $sequence->class);
24+
$this->assertSame(DummyGroupProvider::class, $sequence->class);
2525
}
2626

2727
public function testCreateAttributeStyle()
2828
{
29-
$sequence = new GroupSequenceProvider(class: DummyGroupSequenceProvider::class);
29+
$sequence = new GroupSequenceProvider(class: DummyGroupProvider::class);
3030

31-
$this->assertSame(DummyGroupSequenceProvider::class, $sequence->class);
31+
$this->assertSame(DummyGroupProvider::class, $sequence->class);
3232
}
3333
}

0 commit comments

Comments
 (0)
0