diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 7f96f9182df8d..2a70667a2d966 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -173,6 +173,7 @@ use Symfony\Component\Translation\Translator; use Symfony\Component\Uid\Factory\UuidFactory; use Symfony\Component\Uid\UuidV4; +use Symfony\Component\Validator\Constraints\ExpressionLanguageProvider; use Symfony\Component\Validator\ConstraintValidatorInterface; use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader; use Symfony\Component\Validator\ObjectInitializerInterface; @@ -1664,6 +1665,10 @@ private function registerValidationConfiguration(array $config, ContainerBuilder if (!class_exists(ExpressionLanguage::class)) { $container->removeDefinition('validator.expression_language'); } + + if (!class_exists(ExpressionLanguageProvider::class)) { + $container->removeDefinition('validator.expression_language_provider'); + } } private function registerValidatorMapping(ContainerBuilder $container, array $config, array &$files): void diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php index 6c5b86b2ee646..54a5d09cfc161 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.php @@ -15,6 +15,7 @@ use Symfony\Component\Cache\Adapter\PhpArrayAdapter; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\Validator\Constraints\EmailValidator; +use Symfony\Component\Validator\Constraints\ExpressionLanguageProvider; use Symfony\Component\Validator\Constraints\ExpressionValidator; use Symfony\Component\Validator\Constraints\NoSuspiciousCharactersValidator; use Symfony\Component\Validator\Constraints\NotCompromisedPasswordValidator; @@ -82,11 +83,16 @@ ->set('validator.expression_language', ExpressionLanguage::class) ->args([service('cache.validator_expression_language')->nullOnInvalid()]) + ->call('registerProvider', [ + service('validator.expression_language_provider')->ignoreOnInvalid(), + ]) ->set('cache.validator_expression_language') ->parent('cache.system') ->tag('cache.pool') + ->set('validator.expression_language_provider', ExpressionLanguageProvider::class) + ->set('validator.email', EmailValidator::class) ->args([ abstract_arg('Default mode'), diff --git a/src/Symfony/Component/Validator/Constraints/ExpressionLanguageProvider.php b/src/Symfony/Component/Validator/Constraints/ExpressionLanguageProvider.php new file mode 100644 index 0000000000000..b491649a1bec0 --- /dev/null +++ b/src/Symfony/Component/Validator/Constraints/ExpressionLanguageProvider.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\Constraints; + +use Symfony\Component\ExpressionLanguage\ExpressionFunction; +use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface; + +class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface +{ + public function getFunctions(): array + { + return [ + new ExpressionFunction('is_valid', function (...$arguments) { + return sprintf( + '0 === $context->getValidator()->inContext($context)->validate(%s)->getViolations()->count()', + implode(', ', $arguments) + ); + }, function (array $variables, ...$arguments): bool { + return 0 === $variables['context']->getValidator()->inContext($variables['context'])->validate(...$arguments)->getViolations()->count(); + }), + ]; + } +} diff --git a/src/Symfony/Component/Validator/Constraints/ExpressionValidator.php b/src/Symfony/Component/Validator/Constraints/ExpressionValidator.php index 45026f878471c..0a2193da791a6 100644 --- a/src/Symfony/Component/Validator/Constraints/ExpressionValidator.php +++ b/src/Symfony/Component/Validator/Constraints/ExpressionValidator.php @@ -11,8 +11,6 @@ namespace Symfony\Component\Validator\Constraints; -use Symfony\Component\ExpressionLanguage\ExpressionFunction; -use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; @@ -22,15 +20,14 @@ * @author Fabien Potencier * @author Bernhard Schussek */ -class ExpressionValidator extends ConstraintValidator implements ExpressionFunctionProviderInterface +class ExpressionValidator extends ConstraintValidator { private ExpressionLanguage $expressionLanguage; public function __construct(ExpressionLanguage $expressionLanguage = null) { if ($expressionLanguage) { - $this->expressionLanguage = clone $expressionLanguage; - $this->expressionLanguage->registerProvider($this); + $this->expressionLanguage = $expressionLanguage; } } @@ -56,25 +53,11 @@ public function validate(mixed $value, Constraint $constraint) } } - public function getFunctions(): array - { - return [ - new ExpressionFunction('is_valid', function (...$arguments) { - return sprintf( - '0 === $context->getValidator()->inContext($context)->validate(%s)->getViolations()->count()', - implode(', ', $arguments) - ); - }, function (array $variables, ...$arguments): bool { - return 0 === $variables['context']->getValidator()->inContext($variables['context'])->validate(...$arguments)->getViolations()->count(); - }), - ]; - } - private function getExpressionLanguage(): ExpressionLanguage { if (!isset($this->expressionLanguage)) { $this->expressionLanguage = new ExpressionLanguage(); - $this->expressionLanguage->registerProvider($this); + $this->expressionLanguage->registerProvider(new ExpressionLanguageProvider()); } return $this->expressionLanguage; diff --git a/src/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php index 132507c923af7..c237c793f0cbc 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php @@ -13,6 +13,7 @@ use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\Validator\Constraints\Expression; +use Symfony\Component\Validator\Constraints\ExpressionLanguageProvider; use Symfony\Component\Validator\Constraints\ExpressionValidator; use Symfony\Component\Validator\Constraints\NotNull; use Symfony\Component\Validator\Constraints\Range; @@ -359,10 +360,8 @@ public function testIsValidExpressionInvalid() */ public function testCompileIsValid(string $expression, array $names, string $expected) { - $provider = new ExpressionValidator(); - $expressionLanguage = new ExpressionLanguage(); - $expressionLanguage->registerProvider($provider); + $expressionLanguage->registerProvider(new ExpressionLanguageProvider()); $result = $expressionLanguage->compile($expression, $names); 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