У меня есть пользовательский модуль, который отображает форму.
После отправки формы я хочу перенаправить пользователя на другую страницу.
Как я могу это сделать?
В обработчике отправки вы делаете
Drupal 7:
$form_state['redirect'] = 'url';
Drupal 8:
$form_state->setRedirect('route', $args, $options);
$form_state->setRedirectUrl(\Drupal\Core\Url);
/my-form?destination=node/123
.Следует отметить, что существует несколько триггеров, которые могут предотвратить перенаправление:
$form_state['redirect'] === FALSE
: Если установлено, функция построителя формы или обработчик проверки / отправки формы не хочет, чтобы пользователь перенаправлялся, что означает, чтоdrupal_goto()
он не вызывается. Для большинства форм логика перенаправления будет одинаковой независимо от того,$form_state['redirect']
является ли она неопределенной или FALSE. Однако, если он не был определен и текущий запрос содержит строку запроса 'destination', онdrupal_goto()
будет перенаправлен на этот данный пункт назначения. Только установка$form_state['redirect']
дляFALSE
предотвратит перенаправление.$form_state['no_redirect'] === TRUE
: Когда установлено, обратный вызов, который первоначально построил форму, явно запрещает любое перенаправление, независимо от значения перенаправления в$form_state['redirect']
. Например,ajax_get_form()
определяет$form_state['no_redirect']
при построении формы в обратном вызове AJAX, чтобы предотвратить любое перенаправление.$form_state['no_redirect']
НЕ должны быть изменены функциями построителя форм или обработчиками проверки / отправки форм.$form_state['programmed'] === TRUE
: означает, что отправка формы обычно вызывается с помощьюdrupal_form_submit()
, поэтому любое перенаправление нарушит вызываемый скриптdrupal_form_submit()
.$form_state['rebuild'] === TRUE
: означает, что форму нужно перестраивать без перенаправления.источник
Для Drupal 7 я попробовал это на пользовательском модуле, и он работает. Это также может быть использовано в теме:
Кстати, я нашел этот фрагмент здесь: https://gist.github.com/postrational/5768796
источник
Чтобы перенаправить на внешний URL-адрес в Drupal 8, используйте
TrustedRedirectResponse
класс, как показано в следующем коде.источник
use
ключевым словом и его пространством имен:use Drupal\Core\Routing\TrustedRedirectResponse;
На D8 мне это понравилось (но это не сработает ... см. Ниже):
Редактировать/
Мне не хватало того, что setRedirect / setRedirectUrl работает ПОСЛЕ отправки модуля, так что это мое рабочее решение на D8:
Надеюсь, что это может помочь
источник
Для Drupal 7, если вы хотите перенаправить на URL с такими параметрами, как
someurl?param1=1¶m2=2
источник