Magento 2: Исключение наблюдателя событий Не отображается на экране
В пользовательском расширении я создаю наблюдателя таким образом.
app\code\Vendor\Extension\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="sales_quote_remove_item">
<observer name="sales_quote_remove_item_handler" instance="Vendor\Extension\Observer\RemovecartbeforeObserver" shared="false" />
</event>
</config>
И Мой Наблюдатель:
app\code\Vendor\Extension\Observer\RemovecartbeforeObserver.php
use Magento\Framework\Event\ObserverInterface;
class RemovecartbeforeObserver implements ObserverInterface
{
public function execute(\Magento\Framework\Event\Observer $observer)
{
// HERE IS MY CODE
$message = "THIS IS CUSTOM ERROR MESSAGE";
throw new \Magento\Framework\Exception\LocalizedException(__($message));
return;
}
}
Вызывается моя функция наблюдателя, но она не отображает пользовательскую ошибку на странице. Вместо этого он показывает мое сообщение в файле exception.log
вот так.
main.CRITICAL: exception 'Magento\Framework\Exception\LocalizedException' with message 'THIS IS CUSTOM ERROR MESSAGE' in E:\xampp\htdocs\myworks\magento213\app\code\Vendor\Extension\Observer\RemovecartbeforeObserver.php:106
8
Author: Dhiren Vasoya, 2017-02-06
3 answers
Я поискал еще кое-что по этому поводу и, наконец, нашел свое решение,
Мне нужно просто изменить код наблюдателя вот так.
app\code\Vendor\Extension\Observer\RemovecartbeforeObserver.php
use Magento\Framework\Event\ObserverInterface;
class RemovecartbeforeObserver implements ObserverInterface
{
protected $messageManager;
protected $_responseFactory;
protected $_url;
public function __construct(\Magento\Framework\Message\ManagerInterface $messageManager,
\Magento\Framework\App\ResponseFactory $responseFactory,
\Magento\Framework\UrlInterface $url)
{
$this->messageManager = $messageManager;
$this->_responseFactory = $responseFactory;
$this->_url = $url;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
// HERE IS MY CODE
$message = "THIS IS CUSTOM ERROR MESSAGE";
$this->messageManager->addError($message);
$cartUrl = $this->_url->getUrl('checkout/cart/index');
$this->_responseFactory->create()->setRedirect($cartUrl)->sendResponse();
exit;
}
}
11
Author: Dhiren Vasoya, 2017-02-07 09:37:44
Обновите свой класс, чтобы он был таким:
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Event\Observer;
use Magento\Framework\Message\ManagerInterface as MessageManagerInterface;
use Magento\Framework\Controller\Result\RedirectFactory;
class RemovecartbeforeObserver implements ObserverInterface
{
protected $messageManager;
protected $redirectFactory;
public function __construct(
MessageManagerInterface $messageManager,
RedirectFactory $redirectFactory
) {
$this->messageManager = $messageManager;
$this->redirectFactory = $redirectFactory;
}
public function execute(Observer $observer)
{
$observer->getRequest()->setParam('item', false);
$message = "THIS IS CUSTOM ERROR MESSAGE";
$this->messageManager->addError($message);
return $this->redirectFactory->create()->setPath('*/*/');
}
}
4
Author: Rendy Eko Prastiyo, 2017-02-07 06:05:29
Пожалуйста, следуйте, если приведенное выше решение невыполнимо:
Остановить-товар-добавить-в-корзину
Не забудьте поднять голос, если вас правильно отвлекли.
0
Author: Hassan Ali Shahzad, 2020-11-17 18:50:26