FieldStorageAddForm::submitForm

public FieldStorageAddForm::submitForm(array &$form, FormStateInterface $form_state)

Form submission handler.

Parameters

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

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Overrides FormInterface::submitForm

File

core/modules/field_ui/src/Form/FieldStorageAddForm.php, line 302

Class

FieldStorageAddForm
Provides a form for the "field storage" add page.

Namespace

Drupal\field_ui\Form

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
public function submitForm(array &$form, FormStateInterface $form_state) {
  $error = FALSE;
  $values = $form_state->getValues();
  $destinations = array();
  $entity_type = $this->entityManager->getDefinition($this->entityTypeId);
 
  // Create new field.
  if ($values['new_storage_type']) {
    $field_storage_values = [
      'field_name' => $values['field_name'],
      'entity_type' => $this->entityTypeId,
      'type' => $values['new_storage_type'],
      'translatable' => $values['translatable'],
    ];
    $field_values = [
      'field_name' => $values['field_name'],
      'entity_type' => $this->entityTypeId,
      'bundle' => $this->bundle,
      'label' => $values['label'],
      // Field translatability should be explicitly enabled by the users.
      'translatable' => FALSE,
    ];
    $widget_id = $formatter_id = NULL;
 
    // Check if we're dealing with a preconfigured field.
    if (strpos($field_storage_values['type'], 'field_ui:') !== FALSE) {
      list(, $field_type, $option_key) = explode(':', $field_storage_values['type'], 3);
      $field_storage_values['type'] = $field_type;
 
      $field_type_class = $this->fieldTypePluginManager->getDefinition($field_type)['class'];
      $field_options = $field_type_class::getPreconfiguredOptions()[$option_key];
 
      // Merge in preconfigured field storage options.
      if (isset($field_options['field_storage_config'])) {
        foreach (array('cardinality', 'settings') as $key) {
          if (isset($field_options['field_storage_config'][$key])) {
            $field_storage_values[$key] = $field_options['field_storage_config'][$key];
          }
        }
      }
 
      // Merge in preconfigured field options.
      if (isset($field_options['field_config'])) {
        foreach (array('required', 'settings') as $key) {
          if (isset($field_options['field_config'][$key])) {
            $field_values[$key] = $field_options['field_config'][$key];
          }
        }
      }
 
      $widget_id = isset($field_options['entity_form_display']['type']) ? $field_options['entity_form_display']['type'] : NULL;
      $formatter_id = isset($field_options['entity_view_display']['type']) ? $field_options['entity_view_display']['type'] : NULL;
    }
 
    // Create the field storage and field.
    try {
      $this->entityManager->getStorage('field_storage_config')->create($field_storage_values)->save();
      $field = $this->entityManager->getStorage('field_config')->create($field_values);
      $field->save();
 
      $this->configureEntityFormDisplay($values['field_name'], $widget_id);
      $this->configureEntityViewDisplay($values['field_name'], $formatter_id);
 
      // Always show the field settings step, as the cardinality needs to be
      // configured for new fields.
      $route_parameters = array(
        'field_config' => $field->id(),
      ) + FieldUI::getRouteBundleParameter($entity_type, $this->bundle);
      $destinations[] = array('route_name' => "entity.field_config.{$this->entityTypeId}_storage_edit_form", 'route_parameters' => $route_parameters);
      $destinations[] = array('route_name' => "entity.field_config.{$this->entityTypeId}_field_edit_form", 'route_parameters' => $route_parameters);
      $destinations[] = array('route_name' => "entity.{$this->entityTypeId}.field_ui_fields", 'route_parameters' => $route_parameters);
 
      // Store new field information for any additional submit handlers.
      $form_state->set(['fields_added', '_add_new_field'], $values['field_name']);
    }
    catch (\Exception $e) {
      $error = TRUE;
      drupal_set_message($this->t('There was a problem creating field %label: @message', array('%label' => $values['label'], '@message' => $e->getMessage())), 'error');
    }
  }
 
  // Re-use existing field.
  if ($values['existing_storage_name']) {
    $field_name = $values['existing_storage_name'];
 
    try {
      $field = $this->entityManager->getStorage('field_config')->create(array(
        'field_name' => $field_name,
        'entity_type' => $this->entityTypeId,
        'bundle' => $this->bundle,
        'label' => $values['existing_storage_label'],
      ));
      $field->save();
 
      $this->configureEntityFormDisplay($field_name);
      $this->configureEntityViewDisplay($field_name);
 
      $route_parameters = array(
        'field_config' => $field->id(),
      ) + FieldUI::getRouteBundleParameter($entity_type, $this->bundle);
      $destinations[] = array('route_name' => "entity.field_config.{$this->entityTypeId}_field_edit_form", 'route_parameters' => $route_parameters);
      $destinations[] = array('route_name' => "entity.{$this->entityTypeId}.field_ui_fields", 'route_parameters' => $route_parameters);
 
      // Store new field information for any additional submit handlers.
      $form_state->set(['fields_added', '_add_existing_field'], $field_name);
    }
    catch (\Exception $e) {
      $error = TRUE;
      drupal_set_message($this->t('There was a problem creating field %label: @message', array('%label' => $values['label'], '@message' => $e->getMessage())), 'error');
    }
  }
 
  if ($destinations) {
    $destination = $this->getDestinationArray();
    $destinations[] = $destination['destination'];
    $form_state->setRedirectUrl(FieldUI::getNextDestination($destinations, $form_state));
  }
  elseif (!$error) {
    drupal_set_message($this->t('Your settings have been saved.'));
  }
}
doc_Drupal
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.