You are here

public function FapiValidationValidatorsManager::validate in Form API Validation 8.2

Execute validation.

Parameters

array &$element: Form Element.

\Drupal\Core\Form\FormStateInterface &$form_state: Form State Object.

File

src/FapiValidationValidatorsManager.php, line 60

Class

FapiValidationValidatorsManager
A plugin manager for Fapi Validaton Validators Plugin.

Namespace

Drupal\fapi_validation

Code

public function validate(array &$element, FormStateInterface &$form_state) {

  // If element is empty and not required, by pass rule validation.
  if (!$element['#required'] && empty($element['#value']) && $element['#value'] !== 0) {
    return;
  }
  $def = $element['#validators'];
  foreach ($def as $raw_validation) {

    // Parse Validator.
    $validator = new Validator($raw_validation, $form_state
      ->getValue($element['#parents']));
    if (!$this
      ->hasValidator($validator
      ->getName())) {

      // @TODO throw Validator not found
      throw new \LogicException("Invalid validator name '{$validator->getName()}'.");
    }
    $plugin = $this
      ->getDefinition($validator
      ->getName());
    $instance = $this
      ->createInstance($plugin['id']);
    if (!$instance
      ->validate($validator, $element, $form_state)) {
      $error_message = $this
        ->processErrorMessage($validator, $plugin, $element);
      $form_state
        ->setError($element, $error_message);
    }
  }
}