Drupal-8 Modal не обрабатывает ошибки при входе в систему

Я использовал класс «use-ajax» для отображения формы входа в модальном режиме. Я хочу обрабатывать ошибки проверки в том же модальном режиме, не закрывая его. При успешном входе в систему он перенаправляется правильно, но когда возникает ошибка, он закрывает модальное окно и перенаправляет на страницу входа, т.е. пользователь/логин, и отображает ошибки на этой странице. Я попытался использовать обратный вызов ajax для отображения ошибки в самом модальном режиме, изменив форму, которая работает. Но это дает мне ошибку drupal ajax. Вот мой код:

 $form['#prefix'] = '<div id="modal-form">';
     $form['#suffix'] = '</div>';
     $form['status_messages'] = [ 
           '#type' => 'status_messages',
                 '#weight' => -10,

     ];

     $form['actions']['submit']['#ajax'] = array(
         'callback' => 'setMessage',
         'wrapper' => 'modal-form',
     );

=========================================================================

function setMessage(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
$response = new AjaxResponse();

 if ($form_state->hasAnyErrors()) {
     $response->addCommand(new ReplaceCommand('#modal-form', $form));

 }
 else {
     $command = new CloseModalDialogCommand('#modal-form', FALSE);
     $response->addCommand($command);

 }
 return $response;
}

Приведенный выше код также дает мне идентификатор сеанса, но из-за ошибки drupal ajax он не перенаправляется при успешном закрытии модального окна.

Если я пойду с не-ajax, т.е. если я удаляю функцию обратного вызова ajax, она работает с успехом, но ошибки не отображаются в модальном режиме.


person Sandeep Sharma    schedule 30.04.2019    source источник


Ответы (1)


Во-первых, проверьте, добавили ли вы изменения, связанные с перенаправлением, используя hook_login в файле вашего модуля. Вы можете удалить эти изменения, связанные с перенаправлением, и обработать перенаправление в своей функции обратного вызова.

function setMessage(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {

     $response = new AjaxResponse();
     $current= \Drupal::currentUser();
     if ($form_state->hasAnyErrors()) {
         $response->addCommand(new ReplaceCommand('#modal-form', $form));

     }
     else if (!$current->id()) {
         $response->addCommand(new ReplaceCommand('#modal-form', $form));
     }
     else {
         $command = new RedirectCommand(' ');

         return $response->addCommand($command);
     }
     return $response;
} 

В случае успеха он закроет модальное окно и перенаправит правильно. Если вы обнаружили какую-либо ошибку или не вошли в систему, она останется в модальной форме.

person Vaibhav Gidde    schedule 11.03.2020