function FormState::setErrorByName

Same name and namespace in other branches
  1. 11.x core/lib/Drupal/Core/Form/FormState.php \Drupal\Core\Form\FormState::setErrorByName()
  2. 10 core/lib/Drupal/Core/Form/FormState.php \Drupal\Core\Form\FormState::setErrorByName()
  3. 8.9.x core/lib/Drupal/Core/Form/FormState.php \Drupal\Core\Form\FormState::setErrorByName()

File

core/lib/Drupal/Core/Form/FormState.php, line 1080

Class

FormState
Stores information about the state of a form.

Namespace

Drupal\Core\Form

Code

public function setErrorByName($name, $message = '') {
  if ($this->isValidationComplete()) {
    throw new \LogicException('Form errors cannot be set after form validation has finished.');
  }
  $errors = $this->getErrors();
  if (!isset($errors[$name])) {
    $record = TRUE;
    $limit_validation_errors = $this->getLimitValidationErrors();
    if ($limit_validation_errors !== NULL) {
      $record = FALSE;
      foreach ($limit_validation_errors as $section) {
        // Exploding by '][' reconstructs the element's #parents. If the
        // reconstructed #parents begin with the same keys as the specified
        // section, then the element's values are within the part of
        // $form_state->getValues() that the clicked button requires to be
        // valid, so errors for this element must be recorded. As the exploded
        // array will all be strings, we need to cast every value of the
        // section array to string.
        if (array_slice(explode('][', $name), 0, count($section)) === array_map('strval', $section)) {
          $record = TRUE;
          break;

        }
      }
    }
    if ($record) {
      $errors[$name] = $message;
      $this->errors = $errors;
      static::setAnyErrors();
    }
  }
  return $this;
}

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