Для всех, кому небезразлично, я заработал со следующим кодом в моем пользовательском модуле «cs_modals»:
/**
* Реализует hook_form_alter().
*/
function cs_modals_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
$запрос = \Drupal::request();
// Проверяем, есть ли запрос Ajax.
если ($request->isXmlHttpRequest()) {
$form['actions']['submit']['#ajax']['callback'] = '_cs_modals_id_submit_ajax_callback';
}
}
/**
* Пользовательский обратный вызов Ajax.
*/
функция _cs_modals_id_submit_ajax_callback (массив и $ форма, FormStateInterface $ form_state) {
// Если форма действительна, закрываем диалог.
если (!$form_state->hasAnyErrors()) {
$response = новый \Drupal\Core\Ajax\AjaxResponse();
$response->addCommand(new \Drupal\Core\Ajax\CloseDialogCommand());
вернуть $ответ;
}
// В противном случае вызовите обратный вызов #ajax по умолчанию.
$form_object = $form_state->getFormObject();
$response = $form_object->submitAjaxForm($form, $form_state) ;
вернуть $ответ;
}
Теперь каждая модальная форма отправляется через Ajax. Теперь я ищу способ автоматического закрытия модального окна при успешной отправке формы или отображения сообщения об ошибке через Ajax, когда одно или несколько обязательных полей не имеют значения. Любая помощь в этом будет оценена по достоинству!