formBuilder = $form_builder; $this->messenger = $messenger; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('form_builder'), $container->get('messenger') ); } /** * {@inheritdoc} */ public function build() { return $this->formBuilder->getForm($this); } /** * {@inheritdoc} */ public function getFormId() { return 'ajax_forms_test_block'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $form['test1'] = [ '#type' => 'select', '#title' => $this->t('Test 1'), '#required' => TRUE, '#options' => [ 'option1' => $this->t('Option 1'), 'option2' => $this->t('Option 2'), ], '#ajax' => [ 'callback' => '::updateOptions', 'wrapper' => 'edit-test1-wrapper', ], '#prefix' => '
', '#suffix' => '
', ]; $form['actions'] = [ '#type' => 'actions', ]; $form['actions']['submit'] = [ '#type' => 'submit', '#value' => $this->t('Submit'), ]; return $form; } /** * Updates the options of a select list. * * @param array $form * An associative array containing the structure of the form. * @param \Drupal\Core\Form\FormStateInterface $form_state * The current state of the form. * * @return array * The updated form element. */ public function updateOptions(array $form, FormStateInterface $form_state) { $form['test1']['#options']['option1'] = $this->t('Option 1!!!'); $form['test1']['#options'] += [ 'option3' => $this->t('Option 3'), 'option4' => $this->t('Option 4'), ]; return $form['test1']; } /** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $this->messenger->addStatus('Submission successful.'); } }