class FieldConfigEditForm

Same name and namespace in other branches
  1. 8.9.x core/modules/field_ui/src/Form/FieldConfigEditForm.php \Drupal\field_ui\Form\FieldConfigEditForm
  2. 10 core/modules/field_ui/src/Form/FieldConfigEditForm.php \Drupal\field_ui\Form\FieldConfigEditForm
  3. 11.x core/modules/field_ui/src/Form/FieldConfigEditForm.php \Drupal\field_ui\Form\FieldConfigEditForm

Provides a form for the field settings form.

@internal

Hierarchy

Expanded class hierarchy of FieldConfigEditForm

File

core/modules/field_ui/src/Form/FieldConfigEditForm.php, line 19

Namespace

Drupal\field_ui\Form
View source
class FieldConfigEditForm extends EntityForm {
  
  /**
   * The entity being used by this form.
   *
   * @var \Drupal\field\FieldConfigInterface
   */
  protected $entity;
  
  /**
   * The entity type bundle info service.
   *
   * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface
   */
  protected $entityTypeBundleInfo;
  
  /**
   * Constructs a new FieldConfigDeleteForm object.
   *
   * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info
   *   The entity type bundle info service.
   */
  public function __construct(EntityTypeBundleInfoInterface $entity_type_bundle_info) {
    $this->entityTypeBundleInfo = $entity_type_bundle_info;
  }
  
  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container->get('entity_type.bundle.info'));
  }
  
  /**
   * {@inheritdoc}
   */
  public function form(array $form, FormStateInterface $form_state) {
    $form = parent::form($form, $form_state);
    $field_storage = $this->entity
      ->getFieldStorageDefinition();
    $bundles = $this->entityTypeBundleInfo
      ->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,
      '#maxlength' => 255,
      '#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.<br />Allowed HTML tags: @tags', [
        '@tags' => FieldFilteredMarkup::displayAllowedTags(),
      ]) . '<br />' . $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.'),
        '#weight' => 12,
      ]);
      $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->entityTypeManager
        ->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();
  }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function #[\ReturnTypeWillChange] 2
EntityForm::$entityTypeManager protected property The entity type manager. 3
EntityForm::$moduleHandler protected property The module handler service.
EntityForm::$operation protected property The name of the current operation.
EntityForm::actionsElement protected function Returns the action form element for the current entity form.
EntityForm::afterBuild public function Form element #after_build callback: Updates the entity with submitted data.
EntityForm::buildEntity public function Overrides EntityFormInterface::buildEntity 3
EntityForm::buildForm public function Overrides FormInterface::buildForm 13
EntityForm::copyFormValuesToEntity protected function Copies top-level form values to entity properties. 9
EntityForm::getBaseFormId public function Overrides BaseFormIdInterface::getBaseFormId 6
EntityForm::getEntity public function Overrides EntityFormInterface::getEntity
EntityForm::getEntityFromRouteMatch public function Overrides EntityFormInterface::getEntityFromRouteMatch 3
EntityForm::getFormId public function Overrides FormInterface::getFormId 12
EntityForm::getOperation public function Overrides EntityFormInterface::getOperation
EntityForm::init protected function Initialize the form state and the entity before the first form build. 3
EntityForm::prepareEntity protected function Prepares the entity object before the form is built first. 3
EntityForm::prepareInvokeAll protected function Invokes the specified prepare hook variant.
EntityForm::processForm public function Process callback: assigns weights and hides extra fields.
EntityForm::setEntity public function Overrides EntityFormInterface::setEntity
EntityForm::setEntityTypeManager public function Overrides EntityFormInterface::setEntityTypeManager
EntityForm::setModuleHandler public function Overrides EntityFormInterface::setModuleHandler
EntityForm::setOperation public function Overrides EntityFormInterface::setOperation
FieldConfigEditForm::$entity protected property The entity being used by this form. Overrides EntityForm::$entity
FieldConfigEditForm::$entityTypeBundleInfo protected property The entity type bundle info service.
FieldConfigEditForm::actions protected function Overrides EntityForm::actions
FieldConfigEditForm::create public static function Overrides FormBase::create
FieldConfigEditForm::form public function Overrides EntityForm::form
FieldConfigEditForm::getTitle public function The _title_callback for the field settings form.
FieldConfigEditForm::save public function Overrides EntityForm::save
FieldConfigEditForm::submitForm public function Overrides EntityForm::submitForm
FieldConfigEditForm::validateForm public function Overrides FormBase::validateForm
FieldConfigEditForm::__construct public function Constructs a new FieldConfigDeleteForm object.
FormBase::$configFactory protected property The config factory. 3
FormBase::$requestStack protected property The request stack. 1
FormBase::$routeMatch protected property The route match.
FormBase::config protected function Retrieves a configuration object.
FormBase::configFactory protected function Gets the config factory for this form. 3
FormBase::container private function Returns the service container.
FormBase::currentUser protected function Gets the current user.
FormBase::getRequest protected function Gets the request object.
FormBase::getRouteMatch protected function Gets the route match.
FormBase::logger protected function Gets the logger for a specific channel.
FormBase::redirect protected function Returns a redirect response object for the specified route.
FormBase::resetConfigFactory public function Resets the configuration factory.
FormBase::setConfigFactory public function Sets the config factory for this form.
FormBase::setRequestStack public function Sets the request stack object to use.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 17
MessengerTrait::messenger public function Gets the messenger. 17
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a &#039;destination&#039; URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.