function OptionsButtonsWidget::formElement

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsButtonsWidget.php \Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsButtonsWidget::formElement()
  2. 8.9.x core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsButtonsWidget.php \Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsButtonsWidget::formElement()
  3. 11.x core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsButtonsWidget.php \Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsButtonsWidget::formElement()

Overrides OptionsWidgetBase::formElement

File

core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsButtonsWidget.php, line 30

Class

OptionsButtonsWidget
Plugin implementation of the 'options_buttons' widget.

Namespace

Drupal\Core\Field\Plugin\Field\FieldWidget

Code

public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
  $element = parent::formElement($items, $delta, $element, $form, $form_state);
  $options = $this->getOptions($items->getEntity());
  $selected = $this->getSelectedOptions($items);
  // If required and there is one single option, preselect it.
  if ($this->required && count($options) == 1) {
    $selected = [
      array_key_first($options),
    ];
  }
  if ($this->multiple) {
    $element += [
      '#type' => 'checkboxes',
      '#default_value' => $selected,
      '#options' => $options,
    ];
  }
  else {
    $element += [
      '#type' => 'radios',
      // Radio buttons need a scalar value. Take the first default value, or
      // default to NULL so that the form element is properly recognized as
      // not having a default value.
'#default_value' => $selected ? reset($selected) : NULL,
      '#options' => $options,
    ];
  }
  return $element;
}

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