public static function MachineName::validateMachineName

public static MachineName::validateMachineName(&$element, FormStateInterface $form_state, &$complete_form)

Form element validation handler for machine_name elements.

Note that #maxlength is validated by _form_validate() already.

This checks that the submitted value:

  • Does not contain the replacement character only.
  • Does not contain disallowed characters.
  • Is unique; i.e., does not already exist.
  • Does not exceed the maximum length (via #maxlength).
  • Cannot be changed after creation (via #disabled).

File

core/lib/Drupal/Core/Render/Element/MachineName.php, line 219

Class

MachineName
Provides a machine name render element.

Namespace

Drupal\Core\Render\Element

Code

public static function validateMachineName(&$element, FormStateInterface $form_state, &$complete_form) {
  // Verify that the machine name not only consists of replacement tokens.
  if (preg_match('@^' . $element['#machine_name']['replace'] . '+$@', $element['#value'])) {
    $form_state->setError($element, t('The machine-readable name must contain unique characters.'));
  }

  // Verify that the machine name contains no disallowed characters.
  if (preg_match('@' . $element['#machine_name']['replace_pattern'] . '@', $element['#value'])) {
    if (!isset($element['#machine_name']['error'])) {
      // Since a hyphen is the most common alternative replacement character,
      // a corresponding validation error message is supported here.
      if ($element['#machine_name']['replace'] == '-') {
        $form_state->setError($element, t('The machine-readable name must contain only lowercase letters, numbers, and hyphens.'));
      }
      // Otherwise, we assume the default (underscore).
      else {
        $form_state->setError($element, t('The machine-readable name must contain only lowercase letters, numbers, and underscores.'));
      }
    }
    else {
      $form_state->setError($element, $element['#machine_name']['error']);
    }
  }

  // Verify that the machine name is unique.
  if ($element['#default_value'] !== $element['#value']) {
    $function = $element['#machine_name']['exists'];
    if (call_user_func($function, $element['#value'], $element, $form_state)) {
      $form_state->setError($element, t('The machine-readable name is already in use. It must be unique.'));
    }
  }
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Render!Element!MachineName.php/function/MachineName::validateMachineName/8.1.x