public function RecursiveContextualValidator::validatePropertyValue in Plug 7
Validates a value against the constraints specified for an object's property.
Parameters
object|string $objectOrClass The object or its class name:
string $propertyName The name of the property:
mixed $value The value to validate against the: property's constraints
array|null $groups The validation groups to validate. If: none is given, "Default" is assumed
Return value
ContextualValidatorInterface This validator
Overrides ContextualValidatorInterface::validatePropertyValue
File
- lib/Symfony/ validator/ Symfony/ Component/ Validator/ Validator/ RecursiveContextualValidator.php, line 231 
Class
- RecursiveContextualValidator
- Recursive implementation of {@link ContextualValidatorInterface}.
Namespace
Symfony\Component\Validator\ValidatorCode
public function validatePropertyValue($objectOrClass, $propertyName, $value, $groups = null) {
  $classMetadata = $this->metadataFactory
    ->getMetadataFor($objectOrClass);
  if (!$classMetadata instanceof ClassMetadataInterface) {
    // Cannot be UnsupportedMetadataException because of BC with
    // Symfony < 2.5
    throw new ValidatorException(sprintf('The metadata factory should return instances of ' . '"\\Symfony\\Component\\Validator\\Mapping\\ClassMetadataInterface", ' . 'got: "%s".', is_object($classMetadata) ? get_class($classMetadata) : gettype($classMetadata)));
  }
  $propertyMetadatas = $classMetadata
    ->getPropertyMetadata($propertyName);
  $groups = $groups ? $this
    ->normalizeGroups($groups) : $this->defaultGroups;
  if (is_object($objectOrClass)) {
    $object = $objectOrClass;
    $cacheKey = spl_object_hash($objectOrClass);
    $propertyPath = PropertyPath::append($this->defaultPropertyPath, $propertyName);
  }
  else {
    // $objectOrClass contains a class name
    $object = null;
    $cacheKey = null;
    $propertyPath = $this->defaultPropertyPath;
  }
  $previousValue = $this->context
    ->getValue();
  $previousObject = $this->context
    ->getObject();
  $previousMetadata = $this->context
    ->getMetadata();
  $previousPath = $this->context
    ->getPropertyPath();
  $previousGroup = $this->context
    ->getGroup();
  foreach ($propertyMetadatas as $propertyMetadata) {
    $this
      ->validateGenericNode($value, $object, $cacheKey . ':' . $propertyName, $propertyMetadata, $propertyPath, $groups, null, TraversalStrategy::IMPLICIT, $this->context);
  }
  $this->context
    ->setNode($previousValue, $previousObject, $previousMetadata, $previousPath);
  $this->context
    ->setGroup($previousGroup);
  return $this;
}