Ich habe ein benutzerdefiniertes Modul, das ein Formular anzeigt.
Nach dem Absenden des Formulars möchte ich den Benutzer auf eine andere Seite weiterleiten.
Wie kann ich das machen?
Im Submit-Handler tun Sie dies
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
.Es sollte beachtet werden, dass es mehrere Trigger gibt, die eine Umleitung verhindern können:
$form_state['redirect'] === FALSE
: Wenn festgelegt, möchte die Form Builder-Funktion oder der Form Validation / Submit-Handler nicht, dass ein Benutzer umgeleitet wird, was bedeutet, dass dieserdrupal_goto()
nicht aufgerufen wird. Bei den meisten Formularen ist die Umleitungslogik gleich, unabhängig davon, ob sie$form_state['redirect']
undefiniert oder falsch ist. Falls es jedoch nicht definiert wurde und die aktuelle Anforderung eine 'Ziel'-Abfragezeichenfolge enthält,drupal_goto()
wird es stattdessen zu diesem angegebenen Ziel umgeleitet. Nur die Einstellung$form_state['redirect']
aufFALSE
verhindert eine Umleitung.$form_state['no_redirect'] === TRUE
: Wenn diese Option festgelegt ist, lässt der Rückruf, der ursprünglich das Formular erstellt hat, Umleitungen unabhängig vom Umleitungswert in explizit zu$form_state['redirect']
. Beispielsweiseajax_get_form()
legt ,$form_state['no_redirect']
wenn ein Formular in einem AJAX Rückruf Aufbau jede Umleitung zu verhindern.$form_state['no_redirect']
sollten NICHT durch Form Builder-Funktionen oder Formularüberprüfungs- / Submit-Handler geändert werden.$form_state['programmed'] === TRUE
: bedeutet, dass die Formularübermittlung normalerweise über aufgerufen wurdedrupal_form_submit()
, sodass bei jeder Umleitung das aufgerufene Skript unterbrochen wirddrupal_form_submit()
.$form_state['rebuild'] === TRUE
: bedeutet, dass das Formular ohne Umleitung neu erstellt werden muss.quelle
Für Drupal 7 habe ich dies auf einem benutzerdefinierten Modul versucht und es funktioniert. Es kann auch in einem Thema verwendet werden:
Übrigens habe ich dieses Snippet hier gefunden: https://gist.github.com/postrational/5768796
quelle
Verwenden Sie die
TrustedRedirectResponse
Klasse wie im folgenden Code , um in Drupal 8 zu einer externen URL umzuleiten .quelle
use
Schlüsselwort und seinem Namespace aufnehmen:use Drupal\Core\Routing\TrustedRedirectResponse;
Auf D8 hat mir das gefallen (aber das wird nicht funktionieren ... siehe unten):
Bearbeiten/
Mir fehlte, dass setRedirect / setRedirectUrl funktioniert, nachdem das Modul gesendet wurde. Dies ist meine funktionierende Lösung für D8:
Hoffe das könnte helfen
quelle
Für Drupal 7, wenn Sie mit params wie zur URL umleiten möchten
someurl?param1=1¶m2=2
quelle