Ich füge einen benutzerdefinierten Übermittlungs-Handler hinzu und möchte nun nach dem Senden des Formulars zur benutzerdefinierten Route umleiten.
Das habe ich benutzt
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\Request;
use \Drupal\Core\Url;
function MYMODULE_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if ($form_id == 'node_trends_form' || $form_id == 'node_trends_edit_form') {
foreach (array_keys($form['actions']) as $action) {
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
$form['actions'][$action]['#submit'][] = 'zyetondev_sync_trends_submit';
}
}
}
}
function zyetondev_sync_trends_submit(array $form, FormStateInterface $form_state) {
$url = Url::fromRoute('view.trends.page_1');
// die(Url::fromRoute('view.trends.page_1')->toString());
drupal_set_message("Done");
$form_state->setRedirect($url);
}
Submit Handler wird ausgeführt und die Umleitung funktioniert korrekt. Das Problem ist, wenn wir die ?destination=
URL verwenden. Wie kann ich die Weiterleitung erzwingen, obwohl die ?destination=
URL aktiviert ist?
8
redirection
Yuseferi
quelle
quelle
?destination=/admin/content
zur URL hinzugefügten Knoten zu bearbeiten , möchte ich meinen benutzerdefinierten Pfad umleiten, obwohl er?destination=
in der URL vorhanden ist.Antworten:
Der einzig richtige Weg, dies zu tun, besteht darin, das Anforderungsobjekt zu ändern und das Ziel zu löschen.
In Ihrem Rückruf:
Je nach Kontext möchten Sie es möglicherweise irgendwo speichern, z. B. an die URL weiterleiten, an die Sie umleiten, damit es später erneut berücksichtigt wird.
Unter https://www.drupal.org/node/2325463 finden Sie ein Kernproblem, das genau dies bewirkt, um die Vorschau-Schaltfläche zu beheben, wenn ein Ziel angegeben wird.
quelle
Dieser Code wird Ihnen helfen.
quelle