Tengo un módulo que procesa una acción de publicación y luego redirige.
Ahora hay casos de error, y me gustaría mostrarles mensajes a los usuarios.
Ya sé que este código agrega el mensaje a la sesión.
$this->messageManager->addError(
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
);
Pero no veo cómo activar el renderizado.
Actualmente solo se muestra cuando ejecuto otra acción, que ya usa esto de manera funcional.
Como, por ejemplo, el inicio de sesión con una contraseña incorrecta.
Respuestas:
Debe usar el método de inyección de objetos en la clase de acción de su módulo para inyectar el objeto del administrador de mensajes, proporcioné un ejemplo de lo que puede hacer. Espero eso ayude
fuente
addError
método está en desuso debería ser addErrorMessage ahoraNo estoy seguro de si esto es lo que estás buscando, pero lo estoy probando.
Puede recuperar los mensajes como este:
dónde
messageManager
es una instancia de\Magento\Framework\Message\ManagerInterface
.En el núcleo, esto se usa para llamadas ajax para devolver los mensajes de error en la respuesta json como esta (
\Magento\Catalog\Controller\Adminhtml\Category\Move
):Para acciones con salida no deberías hacer nada (creo). El
default.xml
archivo de diseño de laMagento_Theme
módulo ya contiene este bloque<block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
que debe manejar los mensajes.[Nota al margen]:
No usar
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
. Inyecte en su constructor una instancia deMagento\Framework\Escaper
y use eso.fuente
/customer/section/load/
. Quizás eso ayude.También puede encontrar el administrador de mensajes accesible a través de
$context
que se inyecta en los constructores de acciones:Luego, solo use como se menciona en las respuestas anteriores
Espero eso ayude
fuente
Para mí, parece que necesita agregar un bloque especial para sus mensajes si desea mostrarlos de una manera que no sea JS.
Por ejemplo, en Magento \ Checkout \ view \ frontend \ layout \ checkout_cart_index.xml hay:
Magento\Checkout\Block\Cart\ValidationMessages
bloque extiende núcleo\Magento\Framework\View\Element\Messages
que se encarga de representar los mensajes.Los bloques definidos en
default.xml
son solo para mensajes JS, creo.fuente
checkout_index_index.xml
?Echa un vistazo a
vendor / magento / module-customer / view / frontend / web / js / customer-data.js
Como podemos ver, ya hay una función de verificación incorporada . Si nuestra respuesta contiene palabras clave:,
'redirect', 'backUrl'
el mensaje se cargará después de redirigir.'redirect', 'backUrl'
.fuente