Cursos Magento

Como desabilitar um observer

,

Publicado em 31 de maio de 2022

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?

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/como-desabilitar-um-observer/"]