In Magento2, how do we print the input data into notification messages for
– Error
– Success
– Warning
– Notice
Magento 2 Global Messages – Notification Messages
global-messagesmagento2
global-messagesmagento2
In Magento2, how do we print the input data into notification messages for
– Error
– Success
– Warning
– Notice
I've added them to an array and stored this in the session like so
if(isset($result['error']) && $result['error']){
foreach($result['message'] as $msg){
Mage::getSingleton('checkout/session')->addError($msg);
$this->_message[] = $msg;
}
Mage::getSingleton( 'customer/session' )->setData( 'validationMessages', $this->_message);
return $this->_redirectUrl($this->_getRefererUrl());
}
But using session variables isn't my desired solution so any other answers still very welcome!
For anyone coming across this problem where notification messages persist across refreshed pages here are some tips that might help you resolve the problem.
If you look at magento-theme/view/frontend/web/js/view/messages.js
you will see where these notification messages are read from the mage-messages
cookie and passed to the backend for display.
You will notice that the function cleans up the mage-messages
cookie
$.mage.cookies.set('mage-messages', '', {
samesite: 'strict',
domain: ''
});
If you add a console info log here, you can see that this executes with every page refresh. However, if you monitor the mage-messages
cookie in the console you can sometimes see the cookie being set, deleted, and set again. This leads to the cookie persisting to the next page.
Whether this has to do with delays in the backend often seen on slower servers i.e. development / development mode or it's a new 2.4 bug I am not sure.
One way to ensure that the cookie is reset after being processed is to add another cleanup function to the prepareMessageForHtml
function. Note this function is only present in 2.4.x
// Bug hunting cookie cleanup for persistent frontend notification messages
//
//
(function CookieCleanup(i) {
setTimeout(function() {
if ($.mage.cookies.get('mage-messages') !=='' )
{
// cleanup
$.mage.cookies.set('mage-messages', '', {
samesite: 'strict',
domain: ''
});
console.info('Debug Cookie cleanup in progress...');
}
// keep on scrubbin'...
if (--i) CookieCleanup(i);
}, 3000)
})(3);
In summary if you are seeing this message during development on 2.4.x try going to production mode with all caches enabled first. Debug further by adding console logs to messages.js
.
Best Answer
In your class, inject the Message ManagerInterface class:
Note, Magento has deprecated methods:
So instead you should use: