function OptionsButtonsWidget::formElement

Same name 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. 10 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.