Same name and namespace in other branches
  1. 8.9.x core/modules/system/tests/modules/form_test/src/Form/FormTestRebuildPreserveValuesForm.php \Drupal\form_test\Form\FormTestRebuildPreserveValuesForm::buildForm()
  2. 9 core/modules/system/tests/modules/form_test/src/Form/FormTestRebuildPreserveValuesForm.php \Drupal\form_test\Form\FormTestRebuildPreserveValuesForm::buildForm()

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

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

Return value

array The form structure.

Overrides FormInterface::buildForm

File

core/modules/system/tests/modules/form_test/src/Form/FormTestRebuildPreserveValuesForm.php, line 25

Class

FormTestRebuildPreserveValuesForm
Form builder for testing preservation of values during a rebuild.

Namespace

Drupal\form_test\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {

  // Start the form with two checkboxes, to test different defaults, and a
  // textfield, to test more than one element type.
  $form = [
    'checkbox_1_default_off' => [
      '#type' => 'checkbox',
      '#title' => t('This checkbox defaults to unchecked'),
      '#default_value' => FALSE,
    ],
    'checkbox_1_default_on' => [
      '#type' => 'checkbox',
      '#title' => t('This checkbox defaults to checked'),
      '#default_value' => TRUE,
    ],
    'text_1' => [
      '#type' => 'textfield',
      '#title' => t('This textfield has a non-empty default value.'),
      '#default_value' => 'DEFAULT 1',
    ],
  ];

  // Provide an 'add more' button that rebuilds the form with an additional two
  // checkboxes and a textfield. The test is to make sure that the rebuild
  // triggered by this button preserves the user input values for the initial
  // elements and initializes the new elements with the correct default values.
  if (!$form_state
    ->has('add_more')) {
    $form['add_more'] = [
      '#type' => 'submit',
      '#value' => 'Add more',
      '#submit' => [
        '::addMoreSubmitForm',
      ],
    ];
  }
  else {
    $form += [
      'checkbox_2_default_off' => [
        '#type' => 'checkbox',
        '#title' => t('This checkbox defaults to unchecked'),
        '#default_value' => FALSE,
      ],
      'checkbox_2_default_on' => [
        '#type' => 'checkbox',
        '#title' => t('This checkbox defaults to checked'),
        '#default_value' => TRUE,
      ],
      'text_2' => [
        '#type' => 'textfield',
        '#title' => t('This textfield has a non-empty default value.'),
        '#default_value' => 'DEFAULT 2',
      ],
    ];
  }

  // A submit button that finishes the form workflow (does not rebuild).
  $form['submit'] = [
    '#type' => 'submit',
    '#value' => 'Submit',
  ];
  return $form;
}