Eu tenho um módulo que processa uma ação Post e, em seguida, redireciona.
Agora, existem casos de erro e eu gostaria de mostrar mensagens para eles aos usuários.
Eu já sei que esse código adiciona a mensagem à sessão.
$this->messageManager->addError(
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
);
Mas não vejo como acionar a renderização.
Atualmente, isso só é mostrado quando executo outra ação, que já a utiliza de maneira funcional.
Como por exemplo o login com senha errada.
Respostas:
Você precisa usar o método de injeção de objeto em sua classe de ação do módulo para injetar o objeto do gerenciador de mensagens nele, forneci um exemplo do que você pode fazer. Espero que ajude
fonte
addError
método está obsoleto deve ser addErrorMessage agoraNão tenho certeza se é isso que você está procurando, mas estou tentando.
Você pode recuperar as mensagens assim:
Onde
messageManager
é uma instância de\Magento\Framework\Message\ManagerInterface
.No núcleo, isso é usado para chamadas ajax para retornar as mensagens de erro na resposta json como esta (
\Magento\Catalog\Controller\Adminhtml\Category\Move
):Para ações com saída, você não deve fazer nada (eu acho). O
default.xml
arquivo de layout doMagento_Theme
módulo já contém esse bloco<block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
que deve lidar com as mensagens.[Nota lateral]:
não use
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
. Injete no seu construtor uma instânciaMagento\Framework\Escaper
e use-a.fonte
/customer/section/load/
. Talvez isso ajude.você também pode encontrar o gerenciador de mensagens acessível através do
$context
qual é injetado nos construtores de ações:Em seguida, use como mencionado nas respostas acima
Espero que ajude
fonte
Para mim, parece que você precisa adicionar um bloco especial para suas mensagens, se quiser mostrá-las de maneira não JS.
Por exemplo, no Magento \ Checkout \ view \ frontend \ layout \ checkout_cart_index.xml, existe:
Magento\Checkout\Block\Cart\ValidationMessages
O bloco estende o bloco principal,\Magento\Framework\View\Element\Messages
responsável pela renderização de mensagens.Os blocos definidos
default.xml
são apenas para mensagens JS, acredito.fonte
checkout_index_index.xml
?Dê uma olhada em
fornecedor / magento / module-customer / view / frontend / web / js / customer-data.js
Como podemos ver, já existe uma função de verificação interna . Se nossa resposta contiver palavras-chave:,
'redirect', 'backUrl'
a mensagem será carregada após o redirecionamento.'redirect', 'backUrl'
.fonte