Вам нужно изменить эти формы, чтобы вы могли добавлять свои собственные обработчики отправки (и удалять нежелательные), и в конечном итоге оттуда вы сможете установить соответствующий редирект, или AjaxResponse
.
Например, для каждой формы внедрите hook_form_alter
из пользовательского модуля:
function MODULE_signup_form_alter(&$form, FormStateInterface $form_state, $form_id) {
$form['actions']['submit']['#attributes']['class'][] = 'use-ajax-submit';
$form['actions']['submit']['#submit'][] = 'MODULE_signup_form_ajax_submit';
}
Затем добавьте соответствующие обработчики отправки, например. :
function MODULE_signup_form_ajax_submit(array $form, FormStateInterface &$form_state) {
$response = new AjaxResponse();
$form-class = '.signup-form'; # using your own selector
$selector = '#drupal-modal' . ' ' . $form-class;
$message = '<div>submitted</div>';
$response->addCommand(new ReplaceCommand($selector, $message));
$form_state->setResponse($response);
}
Я предположил, что вы хотите обновить модальное содержимое, чтобы вторую форму можно было отправить, поэтому здесь я добавил класс 'use-ajax-submit'
(ср. Drupal.behaviors.AJAX
) в соответствующую форму $Атрибуты действия, так что ответ на отправку также может быть представлен в модальном режиме. Также используется ReplaceCommand
для замены отправленного содержимого формы простым сообщением.
Если вместо этого первая отправленная форма должна вызывать перенаправление, не используйте setResponse()
(чтофактически отменяет перенаправление), и используйте setRedirect()
, если URL базового действия не тот, который вам нужен.