Skip to content

Commit 5a5222d

Browse files
[Validator] Fix registering "is_valid()" for #[Expression]
1 parent 01a1330 commit 5a5222d

File tree

3 files changed

+37
-23
lines changed

3 files changed

+37
-23
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
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\Constraints;
13+
14+
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
15+
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
16+
17+
class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface
18+
{
19+
public function getFunctions(): array
20+
{
21+
return [
22+
new ExpressionFunction('is_valid', function (...$arguments) {
23+
return sprintf(
24+
'0 === $context->getValidator()->inContext($context)->validate(%s)->getViolations()->count()',
25+
implode(', ', $arguments)
26+
);
27+
}, function (array $variables, ...$arguments): bool {
28+
return 0 === $variables['context']->getValidator()->inContext($variables['context'])->validate(...$arguments)->getViolations()->count();
29+
}),
30+
];
31+
}
32+
}

Constraints/ExpressionValidator.php

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
namespace Symfony\Component\Validator\Constraints;
1313

14-
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
15-
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
1614
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
1715
use Symfony\Component\Validator\Constraint;
1816
use Symfony\Component\Validator\ConstraintValidator;
@@ -22,15 +20,14 @@
2220
* @author Fabien Potencier <[email protected]>
2321
* @author Bernhard Schussek <[email protected]>
2422
*/
25-
class ExpressionValidator extends ConstraintValidator implements ExpressionFunctionProviderInterface
23+
class ExpressionValidator extends ConstraintValidator
2624
{
2725
private ExpressionLanguage $expressionLanguage;
2826

2927
public function __construct(ExpressionLanguage $expressionLanguage = null)
3028
{
3129
if ($expressionLanguage) {
32-
$this->expressionLanguage = clone $expressionLanguage;
33-
$this->expressionLanguage->registerProvider($this);
30+
$this->expressionLanguage = $expressionLanguage;
3431
}
3532
}
3633

@@ -56,25 +53,11 @@ public function validate(mixed $value, Constraint $constraint)
5653
}
5754
}
5855

59-
public function getFunctions(): array
60-
{
61-
return [
62-
new ExpressionFunction('is_valid', function (...$arguments) {
63-
return sprintf(
64-
'0 === $context->getValidator()->inContext($context)->validate(%s)->getViolations()->count()',
65-
implode(', ', $arguments)
66-
);
67-
}, function (array $variables, ...$arguments): bool {
68-
return 0 === $variables['context']->getValidator()->inContext($variables['context'])->validate(...$arguments)->getViolations()->count();
69-
}),
70-
];
71-
}
72-
7356
private function getExpressionLanguage(): ExpressionLanguage
7457
{
7558
if (!isset($this->expressionLanguage)) {
7659
$this->expressionLanguage = new ExpressionLanguage();
77-
$this->expressionLanguage->registerProvider($this);
60+
$this->expressionLanguage->registerProvider(new ExpressionLanguageProvider());
7861
}
7962

8063
return $this->expressionLanguage;

Tests/Constraints/ExpressionValidatorTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
1515
use Symfony\Component\Validator\Constraints\Expression;
16+
use Symfony\Component\Validator\Constraints\ExpressionLanguageProvider;
1617
use Symfony\Component\Validator\Constraints\ExpressionValidator;
1718
use Symfony\Component\Validator\Constraints\NotNull;
1819
use Symfony\Component\Validator\Constraints\Range;
@@ -359,10 +360,8 @@ public function testIsValidExpressionInvalid()
359360
*/
360361
public function testCompileIsValid(string $expression, array $names, string $expected)
361362
{
362-
$provider = new ExpressionValidator();
363-
364363
$expressionLanguage = new ExpressionLanguage();
365-
$expressionLanguage->registerProvider($provider);
364+
$expressionLanguage->registerProvider(new ExpressionLanguageProvider());
366365

367366
$result = $expressionLanguage->compile($expression, $names);
368367

0 commit comments

Comments
 (0)