diff --git a/src/Symfony/Component/Validator/CHANGELOG.md b/src/Symfony/Component/Validator/CHANGELOG.md index a4259a0b5a..6bcc64a12b 100644 --- a/src/Symfony/Component/Validator/CHANGELOG.md +++ b/src/Symfony/Component/Validator/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG ----- * Deprecated the `checkDNS` and `dnsMessage` options of the `Url` constraint. They will be removed in 5.0. + * added a `values` option to the `Expression` constraint 4.0.0 ----- diff --git a/src/Symfony/Component/Validator/Constraints/Expression.php b/src/Symfony/Component/Validator/Constraints/Expression.php index 3329bd2494..b8c3cb71df 100644 --- a/src/Symfony/Component/Validator/Constraints/Expression.php +++ b/src/Symfony/Component/Validator/Constraints/Expression.php @@ -30,6 +30,7 @@ class Expression extends Constraint public $message = 'This value is not valid.'; public $expression; + public $values = array(); /** * {@inheritdoc} diff --git a/src/Symfony/Component/Validator/Constraints/ExpressionValidator.php b/src/Symfony/Component/Validator/Constraints/ExpressionValidator.php index ce77d9ba84..5f40cfd3f6 100644 --- a/src/Symfony/Component/Validator/Constraints/ExpressionValidator.php +++ b/src/Symfony/Component/Validator/Constraints/ExpressionValidator.php @@ -39,7 +39,7 @@ class ExpressionValidator extends ConstraintValidator throw new UnexpectedTypeException($constraint, __NAMESPACE__.'\Expression'); } - $variables = array(); + $variables = $constraint->values; $variables['value'] = $value; $variables['this'] = $this->context->getObject(); diff --git a/src/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php index 07f17d648a..aa2c9bdf10 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/ExpressionValidatorTest.php @@ -270,4 +270,18 @@ class ExpressionValidatorTest extends ConstraintValidatorTestCase $this->assertTrue($used, 'Failed asserting that custom ExpressionLanguage instance is used.'); } + + public function testPassingCustomValues() + { + $constraint = new Expression(array( + 'expression' => 'value + custom == 2', + 'values' => array( + 'custom' => 1, + ), + )); + + $this->validator->validate(1, $constraint); + + $this->assertNoViolation(); + } }