function Select::processSelect

Same name in other branches
  1. 9 core/lib/Drupal/Core/Render/Element/Select.php \Drupal\Core\Render\Element\Select::processSelect()
  2. 8.9.x core/lib/Drupal/Core/Render/Element/Select.php \Drupal\Core\Render\Element\Select::processSelect()
  3. 11.x core/lib/Drupal/Core/Render/Element/Select.php \Drupal\Core\Render\Element\Select::processSelect()

Processes a select list form element.

This process callback is mandatory for select fields, since all user agents automatically preselect the first available option of single (non-multiple) select lists.

Parameters

array $element: The form element to process.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

array $complete_form: The complete form structure.

Return value

array The processed element.

See also

_form_validate()

File

core/lib/Drupal/Core/Render/Element/Select.php, line 126

Class

Select
Provides a form element for a drop-down menu or scrolling selection box.

Namespace

Drupal\Core\Render\Element

Code

public static function processSelect(&$element, FormStateInterface $form_state, &$complete_form) {
    // #multiple select fields need a special #name.
    if ($element['#multiple']) {
        $element['#attributes']['multiple'] = 'multiple';
        $element['#attributes']['name'] = $element['#name'] . '[]';
    }
    else {
        // If the element is set to #required through #states, override the
        // element's #required setting.
        $required = isset($element['#states']['required']) ? TRUE : $element['#required'];
        // If the element is required and there is no #default_value, then add an
        // empty option that will fail validation, so that the user is required to
        // make a choice. Also, if there's a value for #empty_value or
        // #empty_option, then add an option that represents emptiness.
        if ($required && !isset($element['#default_value']) || isset($element['#empty_value']) || isset($element['#empty_option'])) {
            $element += [
                '#empty_value' => '',
                '#empty_option' => $required ? t('- Select -') : t('- None -'),
            ];
            // The empty option is prepended to #options and purposively not merged
            // to prevent another option in #options mistakenly using the same value
            // as #empty_value.
            $empty_option = [
                $element['#empty_value'] => $element['#empty_option'],
            ];
            $element['#options'] = $empty_option + $element['#options'];
        }
    }
    // Provide the correct default value for #sort_start.
    $element['#sort_start'] = $element['#sort_start'] ?? (isset($element['#empty_value']) ? 1 : 0);
    return $element;
}

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