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.' )); } } |
Please login to continue.