Обновление формы с помощью AJAX button в Drupal 8

Для обновления всей формы в Drupal 8 нужно:

  • Описать класс , расширяющий базовый класс FormBase для создания форм .
  • В методе getFormId() нужно вернуть id формы , в методе buildForm() описать саму форму создаваемую.
  • В параметре #ajax для кнопки указать имя callback функции , которая является публичным методом описанным в этом же классе .
  • В callback методе вернуть форму.

<?php

namespace Drupal\mymodule\Form;

use Drupal\Core\Form\FormBase;

class MyModuleForm extends FormBase {
  
  public function getFormId() {
    return 'mymodule_form';
  }

  public function buildForm(array $form, array &$form_state) {
    
    $form['#prefix'] = '<div id="form-wrapper">';
    $form['#suffix'] = '</div>';

    $form['refresh_button'] = array(
      '#type' => 'submit',
      '#name' => 'refresh',
      '#value' => t('Refresh'),
      '#submit' => array(array($this, 'refreshSubmit')),
      '#ajax' => array(
        'callback' => array($this, 'ajaxFormRefreshCallback'),
        'wrapper' => 'form-wrapper',
        'effect' => 'fade',
      ),
    );
    return $form;
  }
  public function refreshSubmit(array &$form, array &$form_state) {
    $form_state['rebuild'] = TRUE;
  }
  public function ajaxFormRefreshCallback(array &$form, array &$form_state) {
    return $form;
  }
  public function validateForm(array &$form, array &$form_state) {
  }
  public function submitForm(array &$form, array &$form_state) {
  }
}