You are here

public function AjaxFormsTestSimpleForm::buildForm in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php \Drupal\ajax_forms_test\Form\AjaxFormsTestSimpleForm::buildForm()
  2. 10 core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php \Drupal\ajax_forms_test\Form\AjaxFormsTestSimpleForm::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/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php, line 26

Class

AjaxFormsTestSimpleForm
Form builder: Builds a form that triggers a simple AJAX callback.

Namespace

Drupal\ajax_forms_test\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $object = new Callbacks();
  $form = [];
  $form['select'] = [
    '#title' => $this
      ->t('Color'),
    '#type' => 'select',
    '#options' => [
      'red' => 'red',
      'green' => 'green',
      'blue' => 'blue',
    ],
    '#ajax' => [
      'callback' => [
        $object,
        'selectCallback',
      ],
    ],
    '#suffix' => '<div id="ajax_selected_color">No color yet selected</div>',
  ];
  $form['checkbox'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Test checkbox'),
    '#ajax' => [
      'callback' => [
        $object,
        'checkboxCallback',
      ],
    ],
    '#suffix' => '<div id="ajax_checkbox_value">No action yet</div>',
  ];
  $form['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('submit'),
  ];

  // This is for testing invalid callbacks that should return a 500 error in
  // \Drupal\Core\Form\FormAjaxResponseBuilderInterface::buildResponse().
  $invalid_callbacks = [
    'null' => NULL,
    'empty' => '',
    'nonexistent' => 'some_function_that_does_not_exist',
  ];
  foreach ($invalid_callbacks as $key => $value) {
    $form['select_' . $key . '_callback'] = [
      '#type' => 'select',
      '#title' => $this
        ->t('Test %key callbacks', [
        '%key' => $key,
      ]),
      '#options' => [
        'red' => 'red',
        'green' => 'green',
      ],
      '#ajax' => [
        'callback' => $value,
      ],
    ];
  }
  $form['test_group'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Test group'),
    '#open' => TRUE,
  ];

  // Test ajax element in a #group.
  $form['checkbox_in_group_wrapper'] = [
    '#type' => 'container',
    '#attributes' => [
      'id' => 'checkbox-wrapper',
    ],
    '#group' => 'test_group',
    'checkbox_in_group' => [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('AJAX checkbox in a group'),
      '#ajax' => [
        'callback' => [
          $object,
          'checkboxGroupCallback',
        ],
        'wrapper' => 'checkbox-wrapper',
      ],
    ],
    'nested_group' => [
      '#type' => 'details',
      '#title' => $this
        ->t('Nested group'),
      '#open' => TRUE,
    ],
    'checkbox_in_nested' => [
      '#type' => 'checkbox',
      '#group' => 'nested_group',
      '#title' => $this
        ->t('AJAX checkbox in a nested group'),
      '#ajax' => [
        'callback' => [
          $object,
          'checkboxGroupCallback',
        ],
        'wrapper' => 'checkbox-wrapper',
      ],
    ],
  ];
  $form['another_checkbox_in_nested'] = [
    '#type' => 'checkbox',
    '#group' => 'nested_group',
    '#title' => $this
      ->t('Another AJAX checkbox in a nested group'),
  ];
  return $form;
}