public function FieldInstanceEditForm::validateForm

Form validation handler.

Parameters

array $form: An associative array containing the structure of the form.

array $form_state: An associative array containing the current state of the form.

Overrides FormInterface::validateForm

File

drupal/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php, line 133
Contains \Drupal\field_ui\Form\FieldInstanceEditForm.

Class

FieldInstanceEditForm
Provides a form for the field instance settings form.

Namespace

Drupal\field_ui\Form

Code

public function validateForm(array &$form, array &$form_state) {

  // Take the incoming values as the $this->instance definition, so that the 'default
  // value' gets validated using the instance settings being submitted.
  $field_name = $this->instance['field_name'];
  $entity = $form['#entity'];
  $entity_form_display = $form['#entity_form_display'];
  if (isset($form['instance']['default_value_widget'])) {
    $element = $form['instance']['default_value_widget'];

    // Extract the 'default value'.
    $items = array();
    $entity_form_display
      ->getWidget($this->instance
      ->getField()->id)
      ->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);

    // Grab the field definition from $form_state.
    $field_state = field_form_get_state($element['#parents'], $field_name, Language::LANGCODE_NOT_SPECIFIED, $form_state);
    $field = $field_state['field'];

    // Validate the value.
    $errors = array();
    $function = $field['module'] . '_field_validate';
    if (function_exists($function)) {
      $function(NULL, $field, $this->instance, Language::LANGCODE_NOT_SPECIFIED, $items, $errors);
    }

    // Report errors.
    if (isset($errors[$field_name][Language::LANGCODE_NOT_SPECIFIED])) {

      // Store reported errors in $form_state.
      $field_state['errors'] = $errors[$field_name][Language::LANGCODE_NOT_SPECIFIED];
      field_form_set_state($element['#parents'], $field_name, Language::LANGCODE_NOT_SPECIFIED, $form_state, $field_state);

      // Assign reported errors to the correct form element.
      $entity_form_display
        ->getWidget($this->instance
        ->getField()->id)
        ->flagErrors($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
    }
  }
}