protected function RecursiveContextualValidator::validateNode in Zircon Profile 8.0
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php \Drupal\Core\TypedData\Validation\RecursiveContextualValidator::validateNode()
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
2 calls to RecursiveContextualValidator::validateNode()
- RecursiveContextualValidator::validate in core/
lib/ Drupal/ Core/ TypedData/ Validation/ RecursiveContextualValidator.php - Validates a value against a constraint or a list of constraints.
- RecursiveContextualValidator::validateProperty in core/
lib/ Drupal/ Core/ TypedData/ Validation/ RecursiveContextualValidator.php - Validates a property of an object against the constraints specified for this property.
File
- core/
lib/ Drupal/ Core/ TypedData/ Validation/ RecursiveContextualValidator.php, line 125 - Contains \Drupal\Core\TypedData\Validation\RecursiveContextualValidator.
Class
- RecursiveContextualValidator
- Defines a recursive contextual validator for Typed Data.
Namespace
Drupal\Core\TypedData\ValidationCode
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;
}