Wir wissen bereits, wie man von einem Observer für die magento 1.x-Version umleitet .
Für Magento 2 wissen wir jedoch nicht, wie man eine Umleitung von einem Beobachter mit Gewalt durchführt .
Ich habe google gemacht, bekomme aber keine Antwort.
magento2
event-observer
redirect
Amit Bera
quelle
quelle
Antworten:
Ja, ich habe selbst eine Lösung gefunden, indem ich recherchiert habe
Wenn Sie , dass dann tun wollen
__construct()
Funktionyour class observer
, müssen Sie zwei Klassen injizieren .\Magento\Framework\App\ResponseFactory
die für die Umleitung verantwortlich ist ,\Magento\Framework\UrlInterface
die eine URL für diese Umleitung erstellt.ResponseFactory
und verwenden Sie diesetRedirect($YourUrl)->sendResponse();
Umleitung zu Ihrer gewünschten URL.Beobachter
Beispiel:
Hier schreibe ich ein Beispiel für diese Umleitung.
Grundsätzlich habe
sales_quote_collect_totals_after
ich versucht, gewaltsam umzuleiten, um uns zu kontaktieren.Hier der Beobachtercode:
quelle
\Magento\Framework\App\Response\Http
stattdessen ein Konstruktorargument verwenden. Bei Verwendung der Factory-Klasse funktioniert dies nicht.Durch das Injizieren des
\Magento\Framework\App\ActionFlag $actionFlag
und$this->_actionFlag->set('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true);
wird Magento gezwungen, die Verarbeitung weiterer Ereignisse zu beenden und von einem Beobachter umzuleiten, insbesondere bei Verwendung eines Predispatch-Ereignisses.Hier ist der Beispielcode
quelle
Die obige Antwort funktioniert bei mir nicht. Ich habe meinen Beobachtercode aktualisiert
quelle
Ich arbeite auch an einem Formular, das Ajax für die Bearbeitung von Anfragen verwendet. Ich sende die Antwort in Form von json und verwende basierend auf Erfolg / Misserfolg der Ajax-Anfrage die Datei window.location.href , um auf eine Seite umzuleiten.
Sie können die erforderliche URL im json übergeben und in der Antwort mit dem Punkt (.) -Operator darauf zugreifen.
Das funktioniert gut für mich.
quelle
Abhängig vom Anwendungsfall haben die meisten vorgeschlagenen Lösungen ein Problem: Weiterleitungen können aufgrund anderer Stellen, an denen die Antwort festgelegt ist, zwischengespeichert werden.
Szenario: Sie führen eine Umleitung basierend auf dem Anmeldestatus durch -> Auch nach der Anmeldung wird die geschützte Seite, auf die sie vor der Anmeldung zugreifen wollten, weiterhin umgeleitet, da die 302-Antwort für einen Tag zwischengespeichert wird.
Am Ende habe ich Folgendes getan:
BEARBEITEN funktioniert nicht -> clearHeaders beendet die FPC - arbeitet an einer alternativen Lösung
EDIT2 Bessere Lösung:
quelle
Denken Sie daran
\Magento\Framework\UrlInterface
, die URL andernfalls zu generieren. Sie werden nicht zu einer Struktur der obersten Ebene umgeleitet, z. B. wenn Sie nicht verwendenUrlInterface
und von "checkout" mit "a / b / c" umleiten möchten, wird "checkout / a" verarbeitet / b / c ".Sie haben die Möglichkeit, die
\Magento\Framework\App\ActionFlag
weitere Verarbeitung von Beobachtern zu stoppen.quelle