Я пытаюсь написать простое расширение, которое использует \Magento\Framework\Message\ManagerInterface
добавить пользовательское сообщение об успехе на всех страницах. Я построил этот наблюдатель:
<?php
namespace Revolution\MessageCentre\Observer;
use Magento\Framework\Event\ObserverInterface;
class ControllerActionPredispathObserver implements ObserverInterface
{
/**
* @var \Magento\Framework\App\RequestInterface
*/
protected $request;
/**
* @var \Magento\Framework\Message\ManagerInterface
*/
protected $messageManager;
/**
* @param \Magento\Framework\App\RequestInterface $request
* @param \Magento\Framework\Message\ManagerInterface $messageManager
*/
public function __construct(
\Magento\Framework\App\RequestInterface $request,
\Magento\Framework\Message\ManagerInterface $messageManager
) {
$this->request = $request;
$this->messageManager = $messageManager;
}
/**
* Pre-dispatch frontend controller action
*
* @param \Magento\Framework\Event\Observer $observer
* @return void
*/
public function execute(\Magento\Framework\Event\Observer $observer)
{
$requestParams = $this->request->getParams();
$this->messageManager->addSuccessMessage(__('This is a success message'));
}
}
Наблюдатель прислушивается к предиспетчеру действий контроллера внешнего интерфейса. Здесь etc/frontend/events.xml
:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="controller_action_predispatch">
<observer name="revolution_messagecentre_controller_action_predispatch" instance="MyNamespace\MessageCentre\Observer\ControllerActionPredispathObserver" shared="false" />
</event>
</config>
Он работает нормально, так как добавляет сообщение об успехе на /checkout/cart/
страница, однако она появляется только на этой странице. Я вижу в сетевой панели Chrome и в источнике, что magento/module-theme/view/frontend/templates/messages.phtml
появляется на страницах, подобных странице продукта, но она пуста, здесь нет сообщений. Зачем? Я сделал полный анализ всех кешей, попробовал еще раз с отключенным кешем браузера, но сообщений до сих пор нет. Что вызывает фактическую визуализацию сообщений и почему это отсутствует на всех страницах, кроме корзины? Заранее спасибо!
Задача ещё не решена.
Других решений пока нет …