Pentru oricine îi pasă, l-am făcut să funcționeze cu următorul cod în modulul meu personalizat „cs_modals”:
/**
* Implementează hook_form_alter().
*/
funcția cs_modals_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
$cerere = \Drupal::cerere();
// Verificați dacă solicitarea Ajax.
dacă ($request->isXmlHttpRequest()) {
$form['actions']['submit']['#ajax']['callback'] = '_cs_modals_id_submit_ajax_callback';
}
}
/**
* Apel invers Ajax personalizat.
*/
funcția _cs_modals_id_submit_ajax_callback(matrice &$form, FormStateInterface $form_state) {
// Dacă formularul este valid, închideți dialogul.
dacă (!$form_state->hasAnyErrors()) {
$răspuns = nou \Drupal\Core\Ajax\AjaxResponse();
$response->addCommand(new \Drupal\Core\Ajax\CloseDialogCommand());
returnează $răspuns;
}
// În caz contrar, apelați apelul implicit #ajax.
$form_object = $form_state->getFormObject();
$răspuns = $form_object->submitAjaxForm($form, $form_state) ;
returnează $răspuns;
}
Acum, fiecare formular într-un mod este trimis prin Ajax. Acum caut o modalitate de a închide automat modulul atunci când formularul este trimis cu succes sau de a afișa un mesaj de eroare prin Ajax când unul sau mai multe câmpuri obligatorii nu au nicio valoare. Orice ajutor în acest sens ar fi apreciat!