public function CollectionValidator::validate

Checks if the passed value is valid.

@api

Parameters

mixed $value The value that should be validated:

Constraint $constraint The constraint for the validation:

Overrides ConstraintValidatorInterface::validate

File

drupal/core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CollectionValidator.php, line 29

Class

CollectionValidator
@author Bernhard Schussek <bschussek@gmail.com>

Namespace

Symfony\Component\Validator\Constraints

Code

public function validate($value, Constraint $constraint) {
  if (null === $value) {
    return;
  }
  if (!is_array($value) && !($value instanceof \Traversable && $value instanceof \ArrayAccess)) {
    throw new UnexpectedTypeException($value, 'array or Traversable and ArrayAccess');
  }
  $group = $this->context
    ->getGroup();
  foreach ($constraint->fields as $field => $fieldConstraint) {
    if (is_array($value) && array_key_exists($field, $value) || $value instanceof \ArrayAccess && $value
      ->offsetExists($field)) {
      foreach ($fieldConstraint->constraints as $constr) {
        $this->context
          ->validateValue($value[$field], $constr, '[' . $field . ']', $group);
      }
    }
    elseif (!$fieldConstraint instanceof Optional && !$constraint->allowMissingFields) {
      $this->context
        ->addViolationAt('[' . $field . ']', $constraint->missingFieldsMessage, array(
        '{{ field }}' => $field,
      ), null);
    }
  }
  if (!$constraint->allowExtraFields) {
    foreach ($value as $field => $fieldValue) {
      if (!isset($constraint->fields[$field])) {
        $this->context
          ->addViolationAt('[' . $field . ']', $constraint->extraFieldsMessage, array(
          '{{ field }}' => $field,
        ), $fieldValue);
      }
    }
  }
}