J'ai un module qui traite une action de publication, puis redirige.
Maintenant, il y a des cas d'erreur, et je voudrais leur montrer des messages aux utilisateurs.
Je sais déjà que ce code ajoute le message à la session.
$this->messageManager->addError(
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
);
Mais je ne vois pas comment déclencher le rendu.
Actuellement, il n'est affiché que lorsque j'exécute une autre action, qui l'utilise déjà de manière fonctionnelle.
Comme par exemple la connexion avec un mauvais mot de passe.
Réponses:
Vous devez utiliser la méthode d'injection d'objet sur la classe d'action du module ur pour y injecter l'objet gestionnaire de messages, j'ai fourni un exemple de ce que vous pouvez faire. J'espère que ça aide
la source
addError
méthode est déconseillée devrait être addErrorMessage maintenantJe ne sais pas si c'est ce que vous cherchez, mais je lui donne un coup de feu.
Vous pouvez récupérer les messages comme ceci:
où
messageManager
est une instance de\Magento\Framework\Message\ManagerInterface
.Dans le noyau, ceci est utilisé pour les appels ajax afin de renvoyer les messages d'erreur dans la réponse json comme ceci (
\Magento\Catalog\Controller\Adminhtml\Category\Move
):Pour les actions avec sortie, vous ne devriez rien faire (je pense). Le
default.xml
fichier de mise en page duMagento_Theme
module contient déjà ce bloc<block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
qui doit gérer les messages.[Note latérale]:
Ne pas utiliser
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
. Injectez dans votre constructeur une instance deMagento\Framework\Escaper
et utilisez-la.la source
/customer/section/load/
. Peut-être que cela aide.vous pouvez également trouver le gestionnaire de messages accessible via
$context
qui est injecté dans les constructeurs d'actions:Ensuite, utilisez simplement comme mentionné dans les réponses ci-dessus
J'espère que ça aide
la source
Pour moi, il semble que vous devez ajouter un bloc spécial pour vos messages si vous souhaitez les afficher de manière non JS.
Par exemple, dans Magento \ Checkout \ view \ frontend \ layout \ checkout_cart_index.xml, il y a:
Magento\Checkout\Block\Cart\ValidationMessages
block étend le\Magento\Framework\View\Element\Messages
bloc central qui est responsable du rendu des messages.Les blocs définis dans
default.xml
sont pour les messages JS seulement je crois.la source
checkout_index_index.xml
?Jeter un coup d'œil à
fournisseur / magento / module-client / vue / frontend / web / js / customer-data.js
Comme nous pouvons le voir, il existe déjà une fonction de vérification intégrée . Si notre réponse contient des mots clés:,
'redirect', 'backUrl'
le message se chargera après la redirection.'redirect', 'backUrl'
.la source