public function WSFieldAddFieldForm::submitForm in Web Service Data 8
Same name and namespace in other branches
- 2.0.x modules/wsdata_field/src/Form/WSFieldAddFieldForm.php \Drupal\wsdata_field\Form\WSFieldAddFieldForm::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 FieldStorageAddForm::submitForm
File
- modules/
wsdata_field/ src/ Form/ WSFieldAddFieldForm.php, line 113
Class
- WSFieldAddFieldForm
- Provides a form for the "field storage" add page.
Namespace
Drupal\wsdata_field\FormCode
public function submitForm(array &$form, FormStateInterface $form_state) {
$error = FALSE;
$values = $form_state
->getValues();
$destinations = [];
$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'],
'custom_storage' => TRUE,
];
$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 ([
'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 ([
'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 = [
'field_config' => $field
->id(),
] + FieldUI::getRouteBundleParameter($entity_type, $this->bundle);
$destinations[] = [
'route_name' => "entity.field_config.{$this->entityTypeId}_wsfield_edit_form",
'route_parameters' => $route_parameters,
];
$destinations[] = [
'route_name' => "entity.field_config.{$this->entityTypeId}_storage_edit_form",
'route_parameters' => $route_parameters,
];
$destinations[] = [
'route_name' => "entity.field_config.{$this->entityTypeId}_field_edit_form",
'route_parameters' => $route_parameters,
];
$destinations[] = [
'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;
$this
->messenger()
->addError($this
->t('There was a problem creating field %label: @message', [
'%label' => $values['label'],
'@message' => $e
->getMessage(),
]));
}
}
if ($destinations) {
$destination = $this
->getDestinationArray();
$destinations[] = $destination['destination'];
$form_state
->setRedirectUrl(FieldUI::getNextDestination($destinations, $form_state));
}
elseif (!$error) {
$this
->messenger()
->addStatus($this
->t('Your settings have been saved.'));
}
}