function StateDemo::buildForm

Same name in other branches
  1. 3.x modules/form_api_example/src/Form/StateDemo.php \Drupal\form_api_example\Form\StateDemo::buildForm()

Build the simple form.

@inheritdoc

Overrides FormInterface::buildForm

File

modules/form_api_example/src/Form/StateDemo.php, line 29

Class

StateDemo
Implements the state demo form controller.

Namespace

Drupal\form_api_example\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
    $form['description'] = [
        '#type' => 'item',
        '#markup' => $this->t('This example demonstrates the #states property. #states makes an element visibility dependent on another.'),
    ];
    $form['needs_accommodation'] = [
        '#type' => 'checkbox',
        '#title' => 'Need Special Accommodations?',
    ];
    // The #states property used here binds the visibility of the
    // container element to the value of the needs_accommodation checkbox above.
    $form['accommodation'] = [
        '#type' => 'container',
        '#attributes' => [
            'class' => 'accommodation',
        ],
        // #states is an associative array. Each key is the name of a state to
        // apply to the element, such as 'visible'. Each value is another array,
        // making a list of conditions that denote when the state should be
        // applied. Every condition is a key/value pair, whose key is a jQuery
        // selector that denotes another element on the page, and whose value is
        // an array of conditions, which must be met on in order for the state to
        // be applied.
        //
        // For additional documentation on the #states property including a list
        // of valid states and conditions see drupal_process_states().
'#states' => [
            // The state being affected is "invisible".
'invisible' => [
                // Drupal will only apply this state when the element that satisfies
                // the selector input[name="needs_accommodation"] is un-checked.
':input[name="needs_accommodation"]' => [
                    'checked' => FALSE,
                ],
            ],
        ],
    ];
    $form['accommodation']['diet'] = [
        '#type' => 'textfield',
        '#title' => $this->t('Dietary Restrictions'),
    ];
    // Add a submit button that handles the submission of the form.
    $form['actions']['submit'] = [
        '#type' => 'submit',
        '#value' => $this->t('Submit'),
    ];
    return $form;
}