diff --git a/src/Symfony/Component/Validator/ConstraintValidatorFactory.php b/src/Symfony/Component/Validator/ConstraintValidatorFactory.php index 8152ad0dece11..778e202a84bf8 100644 --- a/src/Symfony/Component/Validator/ConstraintValidatorFactory.php +++ b/src/Symfony/Component/Validator/ConstraintValidatorFactory.php @@ -26,20 +26,17 @@ class ConstraintValidatorFactory implements ConstraintValidatorFactoryInterface { protected $validators = []; - public function __construct() + public function __construct(array $validators = []) { + $this->validators = $validators; } public function getInstance(Constraint $constraint): ConstraintValidatorInterface { - $className = $constraint->validatedBy(); - - if (!isset($this->validators[$className])) { - $this->validators[$className] = 'validator.expression' === $className - ? new ExpressionValidator() - : new $className(); + if ('validator.expression' === $name = $class = $constraint->validatedBy()) { + $class = ExpressionValidator::class; } - return $this->validators[$className]; + return $this->validators[$name] ??= new $class(); } } diff --git a/src/Symfony/Component/Validator/Tests/ConstraintValidatorFactoryTest.php b/src/Symfony/Component/Validator/Tests/ConstraintValidatorFactoryTest.php new file mode 100644 index 0000000000000..d7d9b302d1bb7 --- /dev/null +++ b/src/Symfony/Component/Validator/Tests/ConstraintValidatorFactoryTest.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Validator\ConstraintValidatorFactory; +use Symfony\Component\Validator\Tests\Fixtures\DummyConstraint; +use Symfony\Component\Validator\Tests\Fixtures\DummyConstraintValidator; + +class ConstraintValidatorFactoryTest extends TestCase +{ + public function testGetInstance() + { + $factory = new ConstraintValidatorFactory(); + $this->assertInstanceOf(DummyConstraintValidator::class, $factory->getInstance(new DummyConstraint())); + } + + public function testPredefinedGetInstance() + { + $validator = new DummyConstraintValidator(); + $factory = new ConstraintValidatorFactory([DummyConstraintValidator::class => $validator]); + $this->assertSame($validator, $factory->getInstance(new DummyConstraint())); + } +} diff --git a/src/Symfony/Component/Validator/Tests/ContainerConstraintValidatorFactoryTest.php b/src/Symfony/Component/Validator/Tests/ContainerConstraintValidatorFactoryTest.php index 3999b86b4f196..63b7f6f96ae01 100644 --- a/src/Symfony/Component/Validator/Tests/ContainerConstraintValidatorFactoryTest.php +++ b/src/Symfony/Component/Validator/Tests/ContainerConstraintValidatorFactoryTest.php @@ -15,9 +15,10 @@ use Symfony\Component\DependencyInjection\Container; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\Constraints\Blank as BlankConstraint; -use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\ContainerConstraintValidatorFactory; use Symfony\Component\Validator\Exception\ValidatorException; +use Symfony\Component\Validator\Tests\Fixtures\DummyConstraint; +use Symfony\Component\Validator\Tests\Fixtures\DummyConstraintValidator; class ContainerConstraintValidatorFactoryTest extends TestCase { @@ -59,18 +60,3 @@ public function testGetInstanceInvalidValidatorClass() $factory->getInstance($constraint); } } - -class DummyConstraint extends Constraint -{ - public function validatedBy(): string - { - return DummyConstraintValidator::class; - } -} - -class DummyConstraintValidator extends ConstraintValidator -{ - public function validate($value, Constraint $constraint) - { - } -} diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/DummyConstraint.php b/src/Symfony/Component/Validator/Tests/Fixtures/DummyConstraint.php new file mode 100644 index 0000000000000..c2209f135f5ce --- /dev/null +++ b/src/Symfony/Component/Validator/Tests/Fixtures/DummyConstraint.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; + +class DummyConstraint extends Constraint +{ + public function validatedBy(): string + { + return DummyConstraintValidator::class; + } +} diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/DummyConstraintValidator.php b/src/Symfony/Component/Validator/Tests/Fixtures/DummyConstraintValidator.php new file mode 100644 index 0000000000000..3481a5e2d8c1f --- /dev/null +++ b/src/Symfony/Component/Validator/Tests/Fixtures/DummyConstraintValidator.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Tests\Fixtures; + +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; + +class DummyConstraintValidator extends ConstraintValidator +{ + public function validate($value, Constraint $constraint) + { + } +}