public function FieldStorageAddForm::submitForm in Zircon Profile 8.0
Same name and namespace in other branches
- 8 core/modules/field_ui/src/Form/FieldStorageAddForm.php \Drupal\field_ui\Form\FieldStorageAddForm::submitForm()
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 307 - Contains \Drupal\field_ui\Form\FieldStorageAddForm.
Class
- FieldStorageAddForm
- Provides a form for the "field storage" add page.
Namespace
Drupal\field_ui\FormCode
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.'));
}
}