You are here

public function StateDemo::buildForm in Examples for Developers 3.x

Same name and namespace in other branches
  1. 8 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;
}