Trabalhar com eventos e observers é uma das muitas maneiras de estender e modificar funcionalidades no Magento. Diferente dos Plugins, eventos são disparados em momentos e pontos específicos.
Para que servem os Eventos e Observers
Eles servem como porta de entrada para novas customizações e permitem que classes observadoras (Observers) escutem estes eventos quando eles são chamados.
Ao disparar um evento, é comum que a classe que realizou a ação passe objetos e dados adicionais para quem estiver escutando aquele evento. Por sua vez, a classe observadora pode trabalhar com esses dados para realizar integrações, ou disparar outras ações.
Em alguns casos, a classe que disparou determinado evento trabalhará com os dados enviados. Em outras palavras, permitindo que os observers modifiquem dados que serão usados por ela, modificando assim o comportamento de classes e ações.
Exemplo de Evento
# \Magento\Customer\Model\Session public function setCustomerAsLoggedIn($customer) { $this->regenerateId(); $this->setCustomer($customer); $this->_eventManager->dispatch('customer_login', ['customer' => $customer]); $this->_eventManager->dispatch('customer_data_object_login', ['customer' => $this->getCustomerDataObject()]); return $this; }
No exemplo acima, dois eventos são disparados, e o objeto $customer
é passado.
Veja como trabalhar com Eventos e Observers no Magento 2 para mais detalhes. Neste artigo focaremos em como desabilitar um observer.
Desabilitando um observer no Magento 2
Em alguns casos, ao invés de criar um Plugin para interceptar determinado comportamento, podemos querer apenas desabilitar a classe que está observando um evento.
Para isso precisaremos saber o nome do evento e o nome do observer que queremos desativar.
No exemplo acima, temos o evento customer_login
sendo disparado pelo método \Magento\Customer\Model\Session::setCustomerAsLoggedIn
. E também temos um observer no módulo de checkout que escuta este evento.
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_login"> <observer name="loadCustomerQuote" instance="Magento\Checkout\Observer\LoadCustomerQuoteObserver" /> </event> <event name="customer_logout"> <observer name="unsetAll" instance="Magento\Checkout\Observer\UnsetAllObserver" /> </event> </config>
Note que o nome do Observer é definido na linha 3 (loadCustomerQuote). Ele é responsável por recuperar os itens de do carrinho do usuário e mesclá-los ao carrinho da sessão atual após o login.
Caso queiramos cancelar este comportamento, podemos desabilitar seu observer. Para isso, tudo o que precisamos fazer é criar um módulo e adicionar o seguinte arquivo:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_login"> <observer name="loadCustomerQuote" disabled="true"/> </event> </config>
Desta forma, informamos o nome do evento (linha 2), o nome do observer (linha 3) e adicionamos a propriedade disabled="true"
informando que desejamos desabilitar este observer.
Simples, não é mesmo?
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/como-desabilitar-um-observer/"]