diff --git a/src/Symfony/Component/Validator/Context/ExecutionContext.php b/src/Symfony/Component/Validator/Context/ExecutionContext.php index 683ddd8c97..718de5eb25 100644 --- a/src/Symfony/Component/Validator/Context/ExecutionContext.php +++ b/src/Symfony/Component/Validator/Context/ExecutionContext.php @@ -139,24 +139,10 @@ class ExecutionContext implements ExecutionContextInterface /** * {@inheritdoc} */ - public function setValue($value) + public function setNode($value, MetadataInterface $metadata = null, $propertyPath) { $this->value = $value; - } - - /** - * {@inheritdoc} - */ - public function setMetadata(MetadataInterface $metadata = null) - { $this->metadata = $metadata; - } - - /** - * {@inheritdoc} - */ - public function setPropertyPath($propertyPath) - { $this->propertyPath = (string) $propertyPath; } diff --git a/src/Symfony/Component/Validator/Context/ExecutionContextInterface.php b/src/Symfony/Component/Validator/Context/ExecutionContextInterface.php index b3224d5dd7..beafe75433 100644 --- a/src/Symfony/Component/Validator/Context/ExecutionContextInterface.php +++ b/src/Symfony/Component/Validator/Context/ExecutionContextInterface.php @@ -102,32 +102,14 @@ interface ExecutionContextInterface extends LegacyExecutionContextInterface /** * Sets the currently validated value. * - * @param mixed $value The validated value + * @param mixed $value The validated value + * @param MetadataInterface $metadata The validation metadata + * @param string $propertyPath The property path to the current value * * @internal Used by the validator engine. Should not be called by user * code. */ - public function setValue($value); - - /** - * Sets the current validation metadata. - * - * @param MetadataInterface $metadata The validation metadata - * - * @internal Used by the validator engine. Should not be called by user - * code. - */ - public function setMetadata(MetadataInterface $metadata = null); - - /** - * Sets the property path leading to the current value. - * - * @param string $propertyPath The property path to the current value - * - * @internal Used by the validator engine. Should not be called by user - * code. - */ - public function setPropertyPath($propertyPath); + public function setNode($value, MetadataInterface $metadata = null, $propertyPath); /** * Sets the currently validated group. diff --git a/src/Symfony/Component/Validator/NodeVisitor/NodeValidationVisitor.php b/src/Symfony/Component/Validator/NodeVisitor/NodeValidationVisitor.php index 3a5a0f2bf8..d6e818c44a 100644 --- a/src/Symfony/Component/Validator/NodeVisitor/NodeValidationVisitor.php +++ b/src/Symfony/Component/Validator/NodeVisitor/NodeValidationVisitor.php @@ -69,9 +69,7 @@ class NodeValidationVisitor extends AbstractVisitor return true; } - $context->setValue($node->value); - $context->setMetadata($node->metadata); - $context->setPropertyPath($node->propertyPath); + $context->setNode($node->value, $node->metadata, $node->propertyPath); if ($node instanceof ClassNode) { $this->replaceDefaultGroup($node); @@ -171,43 +169,34 @@ class NodeValidationVisitor extends AbstractVisitor */ private function validateNodeForGroup(Node $node, $group, ExecutionContextInterface $context, $objectHash) { - try { - $context->setGroup($group); + $context->setGroup($group); - foreach ($node->metadata->findConstraints($group) as $constraint) { - // Prevent duplicate validation of constraints, in the case - // that constraints belong to multiple validated groups - if (null !== $objectHash) { - $constraintHash = spl_object_hash($constraint); + foreach ($node->metadata->findConstraints($group) as $constraint) { + // Prevent duplicate validation of constraints, in the case + // that constraints belong to multiple validated groups + if (null !== $objectHash) { + $constraintHash = spl_object_hash($constraint); - if ($node instanceof ClassNode) { - if ($context->isClassConstraintValidated($objectHash, $constraintHash)) { - continue; - } - - $context->markClassConstraintAsValidated($objectHash, $constraintHash); - } elseif ($node instanceof PropertyNode) { - $propertyName = $node->metadata->getPropertyName(); - - if ($context->isPropertyConstraintValidated($objectHash, $propertyName, $constraintHash)) { - continue; - } - - $context->markPropertyConstraintAsValidated($objectHash, $propertyName, $constraintHash); + if ($node instanceof ClassNode) { + if ($context->isClassConstraintValidated($objectHash, $constraintHash)) { + continue; } - } - $validator = $this->validatorFactory->getInstance($constraint); - $validator->initialize($context); - $validator->validate($node->value, $constraint); + $context->markClassConstraintAsValidated($objectHash, $constraintHash); + } elseif ($node instanceof PropertyNode) { + $propertyName = $node->metadata->getPropertyName(); + + if ($context->isPropertyConstraintValidated($objectHash, $propertyName, $constraintHash)) { + continue; + } + + $context->markPropertyConstraintAsValidated($objectHash, $propertyName, $constraintHash); + } } - $context->setGroup(null); - } catch (\Exception $e) { - // Should be put into a finally block once we switch to PHP 5.5 - $context->setGroup(null); - - throw $e; + $validator = $this->validatorFactory->getInstance($constraint); + $validator->initialize($context); + $validator->validate($node->value, $constraint); } } diff --git a/src/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php b/src/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php index b1b4b714cd..563fe74288 100644 --- a/src/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php +++ b/src/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php @@ -581,9 +581,7 @@ class RecursiveContextualValidator implements ContextualValidatorInterface */ public function validateNode($value, $valueHash, $container, $containerHash, MetadataInterface $metadata = null, $propertyPath, array $groups, $traversalStrategy, ExecutionContextInterface $context) { - $context->setValue($value); - $context->setMetadata($metadata); - $context->setPropertyPath($propertyPath); + $context->setNode($value, $metadata, $propertyPath); // if group (=[,G3,G4]) contains group sequence (=) // then call traverse() with each entry of the group sequence and abort