Ich habe ein Modul, das eine Post-Aktion verarbeitet und dann umleitet.
Jetzt gibt es Fehlerfälle, und ich möchte den Benutzern Nachrichten für sie anzeigen.
Ich weiß bereits, dass dieser Code der Sitzung die Nachricht hinzufügt.
$this->messageManager->addError(
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
);
Aber ich verstehe nicht, wie ich das Rendern auslösen soll.
Derzeit wird es nur angezeigt, wenn ich eine andere Aktion ausführe, die dies bereits auf eine funktionierende Weise verwendet.
Wie zum Beispiel das Login mit falschem Passwort.
Antworten:
Sie müssen die Objektinjektionsmethode für Ihre Modulaktionsklasse verwenden, um das Nachrichtenmanagerobjekt darin zu injizieren. Ich habe ein Beispiel dafür bereitgestellt, was Sie tun können. Ich hoffe es hilft
quelle
addError
veraltete Methode sollte jetzt addErrorMessage seinIch bin mir nicht sicher, ob Sie danach suchen, aber ich probiere es aus.
Sie können die Nachrichten folgendermaßen abrufen:
wo
messageManager
ist eine Instanz von\Magento\Framework\Message\ManagerInterface
.Im Kern wird dies für Ajax-Aufrufe verwendet, um die Fehlermeldungen in der JSON-Antwort wie folgt zurückzugeben (
\Magento\Catalog\Controller\Adminhtml\Category\Move
):Für Aktionen mit Ausgabe sollte man nichts tun (denke ich). Die
default.xml
Layoutdatei aus demMagento_Theme
Modul enthält bereits diesen Block<block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
, der die Meldungen verarbeiten soll.[Randnotiz]:
Nicht verwenden
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
. Injizieren Sie in Ihrem Konstruktor eine Instanz vonMagento\Framework\Escaper
und verwenden Sie diese.quelle
/customer/section/load/
. Vielleicht hilft das ja.Sie können auch den Nachrichtenmanager finden, auf den Sie zugreifen können,
$context
indem er in Aktionskonstruktoren eingefügt wird:Als nächstes verwenden Sie einfach wie in den Antworten oben erwähnt
Ich hoffe es hilft
quelle
Für mich sieht es so aus, als müssten Sie einen speziellen Block für Ihre Nachrichten hinzufügen, wenn Sie sie auf Nicht-JS-Weise anzeigen möchten.
Zum Beispiel in Magento \ Checkout \ view \ frontend \ layout \ checkout_cart_index.xml gibt es:
Magento\Checkout\Block\Cart\ValidationMessages
block erweitert den Kernblock\Magento\Framework\View\Element\Messages
, der für das Rendern von Nachrichten zuständig ist.Die in definierten Blöcke
default.xml
sind meines Erachtens nur für JS-Nachrichten bestimmt.quelle
checkout_index_index.xml
?Schauen Sie sich an
vendor / magento / module-customer / view / frontend / web / js / customer-data.js
Wie wir sehen können, gibt es bereits eine eingebaute Prüffunktion . Wenn unsere Antwort Keywords enthält
'redirect', 'backUrl'
, wird die Nachricht nach der Umleitung geladen.'redirect', 'backUrl'
.quelle