function FieldStorageIndexesConstraintValidator::validate

Same name and namespace in other branches
  1. main core/modules/field/src/Plugin/Validation/Constraint/FieldStorageIndexesConstraintValidator.php \Drupal\field\Plugin\Validation\Constraint\FieldStorageIndexesConstraintValidator::validate()

File

core/modules/field/src/Plugin/Validation/Constraint/FieldStorageIndexesConstraintValidator.php, line 19

Class

FieldStorageIndexesConstraintValidator
Validates FieldStorageIndexesConstraint.

Namespace

Drupal\field\Plugin\Validation\Constraint

Code

public function validate(mixed $value, Constraint $constraint) : void {
  if (!$constraint instanceof FieldStorageIndexesConstraint) {
    throw new UnexpectedTypeException($constraint, FieldStorageIndexesConstraint::class);
  }
  if ($value === NULL || $value === []) {
    return;
  }
  if (!is_array($value)) {
    $this->context
      ->buildViolation($constraint->message)
      ->addViolation();
    return;
  }
  foreach ($value as $index_name => $columns) {
    if (!is_string($index_name) || $index_name === '') {
      $this->context
        ->buildViolation($constraint->invalidIndexNameMessage)
        ->setParameter('@index', (string) $index_name)
        ->addViolation();
      continue;
    }
    if (!is_array($columns) || !array_is_list($columns)) {
      $this->context
        ->buildViolation($constraint->invalidIndexMessage)
        ->setParameter('@index', $index_name)
        ->addViolation();
      continue;
    }
    foreach ($columns as $column) {
      if (is_string($column) && $column !== '') {
        continue;
      }
      if (is_array($column)) {
        if ($column === [] || !array_is_list($column) || count($column) != 2) {
          $this->context
            ->buildViolation($constraint->invalidColumnMessage)
            ->setParameter('@index', $index_name)
            ->addViolation();
          continue;
        }
        $name = $column[0] ?? NULL;
        if (!is_string($name) || $name === '') {
          $this->context
            ->buildViolation($constraint->invalidColumnMessage)
            ->setParameter('@index', $index_name)
            ->addViolation();
          continue;
        }
        if (count($column) === 2) {
          $length = $column[1];
          if (!is_int($length) || $length <= 0) {
            $this->context
              ->buildViolation($constraint->invalidColumnLengthMessage)
              ->setParameter('@index', $index_name)
              ->setParameter('@column', $name)
              ->addViolation();
          }
        }
        continue;
      }
      $this->context
        ->buildViolation($constraint->invalidColumnMessage)
        ->setParameter('@index', $index_name)
        ->addViolation();
    }
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.