Mam moduł, który przetwarza akcję Post, a następnie przekierowuje.
Teraz są przypadki błędów i chciałbym pokazywać użytkownikom wiadomości.
Wiem już, że ten kod dodaje komunikat do sesji.
$this->messageManager->addError(
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
);
Ale nie wiem, jak uruchomić renderowanie.
Obecnie jest pokazywany tylko wtedy, gdy wykonuję inną akcję, która już działa w ten sposób.
Na przykład login z niewłaściwym hasłem.
Odpowiedzi:
Musisz użyć metody wstrzykiwania obiektów w klasie akcji modułu ur, aby wstrzyknąć do niego obiekt menedżera komunikatów, podałem przykład tego, co możesz zrobić. Mam nadzieję, że to pomoże
źródło
addError
metoda jest przestarzałe powinny być teraz addErrorMessageNie jestem pewien, czy tego właśnie szukasz, ale daję temu szansę.
Możesz pobrać takie wiadomości:
gdzie
messageManager
jest instancja\Magento\Framework\Message\ManagerInterface
.W rdzeniu jest to używane do wywołań ajax w celu zwrócenia komunikatów o błędach w odpowiedzi JSON w następujący sposób
\Magento\Catalog\Controller\Adminhtml\Category\Move
:W przypadku akcji z wyjściem nie powinieneś nic robić (tak myślę). Plik
default.xml
układu zMagento_Theme
modułu zawiera już ten blok,<block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
który powinien obsługiwać komunikaty.[Uwaga dodatkowa]:
Nie używaj
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
. Wstrzyknij do swojego konstruktora instancjęMagento\Framework\Escaper
i użyj jej.źródło
/customer/section/load/
. Może to pomaga.można również znaleźć menedżera wiadomości,
$context
który jest dostępny poprzez wstrzyknięcie do konstruktorów akcji:Następnie wystarczy użyć, jak wspomniano w odpowiedziach powyżej
Mam nadzieję, że to pomoże
źródło
Dla mnie wygląda na to, że musisz dodać specjalny blok dla swoich wiadomości, jeśli chcesz pokazać je w sposób inny niż JS.
Na przykład w Magento \ Checkout \ view \ frontend \ layout \ checkout_cart_index.xml znajduje się:
Magento\Checkout\Block\Cart\ValidationMessages
blok rozszerza blok podstawowy\Magento\Framework\View\Element\Messages
odpowiedzialny za renderowanie wiadomości.Bloki zdefiniowane w
default.xml
są tylko dla wiadomości JS.źródło
checkout_index_index.xml
?Spojrzeć na
vendor / magento / module-customer / view / frontend / web / js / customer-data.js
Jak widzimy, jest już wbudowana funkcja sprawdzania . Jeśli nasza odpowiedź zawiera słowa kluczowe:
'redirect', 'backUrl'
wiadomość zostanie załadowana po przekierowaniu.'redirect', 'backUrl'
.źródło