function CKEditor5ElementConstraintValidator::validate
Same name in other branches
- 10 core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php \Drupal\ckeditor5\Plugin\Validation\Constraint\CKEditor5ElementConstraintValidator::validate()
- 11.x core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php \Drupal\ckeditor5\Plugin\Validation\Constraint\CKEditor5ElementConstraintValidator::validate()
Throws
\Symfony\Component\Validator\Exception\UnexpectedTypeException Thrown when the given constraint is not supported by this validator.
File
-
core/
modules/ ckeditor5/ src/ Plugin/ Validation/ Constraint/ CKEditor5ElementConstraintValidator.php, line 24
Class
- CKEditor5ElementConstraintValidator
- CKEditor 5 element validator.
Namespace
Drupal\ckeditor5\Plugin\Validation\ConstraintCode
public function validate($element, $constraint) {
if (!$constraint instanceof CKEditor5ElementConstraint) {
throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\\CKEditor5Element');
}
$parsed = HTMLRestrictions::fromString($element);
if ($parsed->allowsNothing() || count($parsed->getAllowedElements()) > 1 || $element !== $parsed->toCKEditor5ElementsArray()[0]) {
$this->context
->buildViolation($constraint->message)
->setParameter('%provided_element', $element)
->addViolation();
}
// The optional "requiredAttributes" constraint property allows more
// detailed validation.
if (isset($constraint->requiredAttributes)) {
$allowed_elements = $parsed->getAllowedElements();
$tag = array_keys($allowed_elements)[0];
$attribute_restrictions = $allowed_elements[$tag];
assert(is_array($constraint->requiredAttributes));
foreach ($constraint->requiredAttributes as $required_attribute) {
// Validate attributeName.
$required_attribute_name = $required_attribute['attributeName'];
if (!is_array($attribute_restrictions) || !isset($attribute_restrictions[$required_attribute_name])) {
$this->context
->buildViolation($constraint->missingRequiredAttributeMessage)
->setParameter('@provided_element', $element)
->setParameter('@required_attribute_name', $required_attribute_name)
->addViolation();
continue;
}
$attribute_values = $attribute_restrictions[$required_attribute_name];
// Validate minAttributeValueCount if specified.
if (isset($required_attribute['minAttributeValueCount'])) {
$min_attribute_value_count = $required_attribute['minAttributeValueCount'];
if (!is_array($attribute_values) || count($attribute_values) < $min_attribute_value_count) {
$this->context
->buildViolation($constraint->requiredAttributeMinValuesMessage)
->setParameter('@provided_element', $element)
->setParameter('@required_attribute_name', $required_attribute_name)
->setParameter('@min_attribute_value_count', $min_attribute_value_count)
->addViolation();
continue;
}
}
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.