[Validator] Simplified validateNodeForGroup

This commit is contained in:
Bernhard Schussek 2014-03-11 11:36:07 +01:00
parent eeed509dfc
commit 5c479d803c

View File

@ -646,43 +646,34 @@ class RecursiveContextualValidator implements ContextualValidatorInterface
*/ */
private function validateNodeForGroup($value, $objectHash, MetadataInterface $metadata = null, $group, ExecutionContextInterface $context) private function validateNodeForGroup($value, $objectHash, MetadataInterface $metadata = null, $group, ExecutionContextInterface $context)
{ {
try { $context->setGroup($group);
$context->setGroup($group);
foreach ($metadata->findConstraints($group) as $constraint) { foreach ($metadata->findConstraints($group) as $constraint) {
// Prevent duplicate validation of constraints, in the case // Prevent duplicate validation of constraints, in the case
// that constraints belong to multiple validated groups // that constraints belong to multiple validated groups
if (null !== $objectHash) { if (null !== $objectHash) {
$constraintHash = spl_object_hash($constraint); $constraintHash = spl_object_hash($constraint);
if ($metadata instanceof ClassMetadataInterface) { if ($metadata instanceof ClassMetadataInterface) {
if ($context->isClassConstraintValidated($objectHash, $constraintHash)) { if ($context->isClassConstraintValidated($objectHash, $constraintHash)) {
continue; continue;
}
$context->markClassConstraintAsValidated($objectHash, $constraintHash);
} elseif ($metadata instanceof PropertyMetadataInterface) {
$propertyName = $metadata->getPropertyName();
if ($context->isPropertyConstraintValidated($objectHash, $propertyName, $constraintHash)) {
continue;
}
$context->markPropertyConstraintAsValidated($objectHash, $propertyName, $constraintHash);
} }
}
$validator = $this->validatorFactory->getInstance($constraint); $context->markClassConstraintAsValidated($objectHash, $constraintHash);
$validator->initialize($context); } elseif ($metadata instanceof PropertyMetadataInterface) {
$validator->validate($value, $constraint); $propertyName = $metadata->getPropertyName();
if ($context->isPropertyConstraintValidated($objectHash, $propertyName, $constraintHash)) {
continue;
}
$context->markPropertyConstraintAsValidated($objectHash, $propertyName, $constraintHash);
}
} }
$context->setGroup(null); $validator = $this->validatorFactory->getInstance($constraint);
} catch (\Exception $e) { $validator->initialize($context);
// Should be put into a finally block once we switch to PHP 5.5 $validator->validate($value, $constraint);
$context->setGroup(null);
throw $e;
} }
} }