protected function RecursiveContextualValidator::validateNode

protected RecursiveContextualValidator::validateNode(TypedDataInterface $data, $constraints = NULL, $is_root_call = FALSE)

Validates a Typed Data node in the validation tree.

If no constraints are passed, the data is validated against the constraints specified in its data definition. If the data is complex or a list and no constraints are passed, the contained properties or list items are validated recursively.

Parameters

\Drupal\Core\TypedData\TypedDataInterface $data: The data to validated.

\Symfony\Component\Validator\Constraint[]|null $constraints: (optional) If set, an array of constraints to validate.

bool $is_root_call: (optional) Whether its the most upper call in the type data tree.

Return value

$this

File

core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php, line 120

Class

RecursiveContextualValidator
Defines a recursive contextual validator for Typed Data.

Namespace

Drupal\Core\TypedData\Validation

Code

protected function validateNode(TypedDataInterface $data, $constraints = NULL, $is_root_call = FALSE) {
  $previous_value = $this->context->getValue();
  $previous_object = $this->context->getObject();
  $previous_metadata = $this->context->getMetadata();
  $previous_path = $this->context->getPropertyPath();

  $metadata = $this->metadataFactory->getMetadataFor($data);
  $cache_key = spl_object_hash($data);
  $property_path = $is_root_call ? '' : PropertyPath::append($previous_path, $data->getName());
  // Pass the canonical representation of the data as validated value to
  // constraint validators, such that they do not have to care about Typed
  // Data.
  $value = $this->typedDataManager->getCanonicalRepresentation($data);
  $this->context->setNode($value, $data, $metadata, $property_path);

  if (isset($constraints) || !$this->context->isGroupValidated($cache_key, Constraint::DEFAULT_GROUP)) {
    if (!isset($constraints)) {
      $this->context->markGroupAsValidated($cache_key, Constraint::DEFAULT_GROUP);
      $constraints = $metadata->findConstraints(Constraint::DEFAULT_GROUP);
    }
    $this->validateConstraints($value, $cache_key, $constraints);
  }

  // If the data is a list or complex data, validate the contained list items
  // or properties. However, do not recurse if the data is empty.
  if (($data instanceof ListInterface || $data instanceof ComplexDataInterface) && !$data->isEmpty()) {
    foreach ($data as $name => $property) {
      $this->validateNode($property);
    }
  }

  $this->context->setNode($previous_value, $previous_object, $previous_metadata, $previous_path);

  return $this;
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!TypedData!Validation!RecursiveContextualValidator.php/function/RecursiveContextualValidator::validateNode/8.1.x