Na extensão personalizada, crio um observador como este.
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>
E meu observador:
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;
}
}
A função My Observer é chamada, mas não mostra erro personalizado na página. Nesse caso, ele mostra minha mensagem em um exception.log
arquivo como este.
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
magento2
event-observer
exception
Dhiren Vasoya
fonte
fonte
Hello Nasty World!
e adicioneexit
para sair da execução do código acima da$message = 'blablabla'
linha. Se você vir a mensagem, poderá ir para a próxima etapa. Experimente e deixe-me agora se oHello Nasty World!
é enviado para o navegador.Hello nasty World
ouWe can't remove the item!
ou algo mais? Forneça também a captura de tela.Respostas:
Eu pesquiso mais algumas coisas sobre isso e finalmente encontrei minha solução,
Eu preciso apenas mudar o código do observador assim.
fonte
Atualize sua classe para ficar assim:
fonte
sales_quote_remove_item
é acionado após a remoção de um item. Se você deseja fazer uma verificação antes de remover um item, observe quesales_quote_item_delete_before
nãosales_quote_remove_item
. Atualização<event name="sales_quote_remove_item">
do seu xml para<event name="sales_quote_item_delete_before">
bin/magento cache:clean && bin/magento cache:flush
após atualizar seu xml?