entity->getFieldStorageDefinition(); $bundles = $this->entityManager->getBundleInfo($this->entity->getTargetEntityTypeId()); $form_title = $this->t('%field settings for %bundle', [ '%field' => $this->entity->getLabel(), '%bundle' => $bundles[$this->entity->getTargetBundle()]['label'], ]); $form['#title'] = $form_title; if ($field_storage->isLocked()) { $form['locked'] = [ '#markup' => $this->t('The field %field is locked and cannot be edited.', ['%field' => $this->entity->getLabel()]), ]; return $form; } // Build the configurable field values. $form['label'] = [ '#type' => 'textfield', '#title' => $this->t('Label'), '#default_value' => $this->entity->getLabel() ?: $field_storage->getName(), '#required' => TRUE, '#weight' => -20, ]; $form['description'] = [ '#type' => 'textarea', '#title' => $this->t('Help text'), '#default_value' => $this->entity->getDescription(), '#rows' => 5, '#description' => $this->t('Instructions to present to the user below this field on the editing form.
Allowed HTML tags: @tags', ['@tags' => FieldFilteredMarkup::displayAllowedTags()]) . '
' . $this->t('This field supports tokens.'), '#weight' => -10, ]; $form['required'] = [ '#type' => 'checkbox', '#title' => $this->t('Required field'), '#default_value' => $this->entity->isRequired(), '#weight' => -5, ]; // Create an arbitrary entity object (used by the 'default value' widget). $ids = (object) [ 'entity_type' => $this->entity->getTargetEntityTypeId(), 'bundle' => $this->entity->getTargetBundle(), 'entity_id' => NULL ]; $form['#entity'] = _field_create_entity_from_ids($ids); $items = $form['#entity']->get($this->entity->getName()); $item = $items->first() ?: $items->appendItem(); // Add field settings for the field type and a container for third party // settings that modules can add to via hook_form_FORM_ID_alter(). $form['settings'] = [ '#tree' => TRUE, '#weight' => 10, ]; $form['settings'] += $item->fieldSettingsForm($form, $form_state); $form['third_party_settings'] = [ '#tree' => TRUE, '#weight' => 11, ]; // Add handling for default value. if ($element = $items->defaultValuesForm($form, $form_state)) { $element = array_merge($element, [ '#type' => 'details', '#title' => $this->t('Default value'), '#open' => TRUE, '#tree' => TRUE, '#description' => $this->t('The default value for this field, used when creating new content.'), ]); $form['default_value'] = $element; } return $form; } /** * {@inheritdoc} */ protected function actions(array $form, FormStateInterface $form_state) { $actions = parent::actions($form, $form_state); $actions['submit']['#value'] = $this->t('Save settings'); if (!$this->entity->isNew()) { $target_entity_type = $this->entityManager->getDefinition($this->entity->getTargetEntityTypeId()); $route_parameters = [ 'field_config' => $this->entity->id(), ] + FieldUI::getRouteBundleParameter($target_entity_type, $this->entity->getTargetBundle()); $url = new Url('entity.field_config.' . $target_entity_type->id() . '_field_delete_form', $route_parameters); if ($this->getRequest()->query->has('destination')) { $query = $url->getOption('query'); $query['destination'] = $this->getRequest()->query->get('destination'); $url->setOption('query', $query); } $actions['delete'] = [ '#type' => 'link', '#title' => $this->t('Delete'), '#url' => $url, '#access' => $this->entity->access('delete'), '#attributes' => [ 'class' => ['button', 'button--danger'], ], ]; } return $actions; } /** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { parent::validateForm($form, $form_state); if (isset($form['default_value'])) { $item = $form['#entity']->get($this->entity->getName()); $item->defaultValuesFormValidate($form['default_value'], $form, $form_state); } } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { parent::submitForm($form, $form_state); // Handle the default value. $default_value = []; if (isset($form['default_value'])) { $items = $form['#entity']->get($this->entity->getName()); $default_value = $items->defaultValuesFormSubmit($form['default_value'], $form, $form_state); } $this->entity->setDefaultValue($default_value); } /** * {@inheritdoc} */ public function save(array $form, FormStateInterface $form_state) { $this->entity->save(); $this->messenger()->addStatus($this->t('Saved %label configuration.', ['%label' => $this->entity->getLabel()])); $request = $this->getRequest(); if (($destinations = $request->query->get('destinations')) && $next_destination = FieldUI::getNextDestination($destinations)) { $request->query->remove('destinations'); $form_state->setRedirectUrl($next_destination); } else { $form_state->setRedirectUrl(FieldUI::getOverviewRouteInfo($this->entity->getTargetEntityTypeId(), $this->entity->getTargetBundle())); } } /** * The _title_callback for the field settings form. * * @param \Drupal\field\FieldConfigInterface $field_config * The field. * * @return string * The label of the field. */ public function getTitle(FieldConfigInterface $field_config) { return $field_config->label(); } }