A interceptação no magento2 substitui os observadores no magento1?

9

A interceptação pretende ser o método preferido quando se lida com a mudança do comportamento de um método original no Magento2 como observadores no magento1?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception
Matoeil
fonte

Respostas:

16

Eu não acho que a interceptação se destina a substituir os observadores de eventos.
Ainda existem eventos despachados no código Magento2.

Os interceptores são apenas uma maneira de processar a entrada ou saída de um método.
Ou o comportamento de um método (usando o aroundinterceptador), mas pelo que entendi isso é uma abordagem arriscada.

Eu acho que é mais uma maneira de evitar a reescrita de classe, tanto quanto possível.
No Magento 1.x, se você precisava modificar o resultado de um método, substituiu a classe que contém e o próprio método.
agora você pode simplesmente usar before, afterou aroundinterceptadores, para manipular os dados.

Com os observadores, você pode manipular dados em determinados pontos fixos de um método, não no método completo em si.

Na minha opinião, o uso de observadores, quando possível, ainda é a melhor abordagem para personalizar mesmo no Magento 2.

Marius
fonte
2
Aceita. A interceptação é um mecanismo de nível inferior. Mas não substitui eventos. Eventos fornecem interface de provedor de serviços de nível superior
Anton Kril 09/09/2015
6

Interceptação é evolução de eventos. Seu objetivo é permitir que um desenvolvedor escreva seu código sem pensar em pontos de extensão.

Com os eventos, você precisa pensar em lugares onde você faz Mage :: dispatchEvent () para que seu módulo seja personalizável.

A interceptação permite que você não pense sobre isso. Você acabou de escrever sua lógica de negócios. Toda chamada de método é um evento. Portanto, se você escrever seu código de uma maneira orientada a objetos, ele será totalmente personalizável por design.

Mas os eventos fornecem uma Interface de Fornecimento de Serviço de nível superior que fala a linguagem comercial. Portanto, os eventos permanecerão no Magento 2.

Anton Kril
fonte
Você pode obter esse fato importante nos devdocs como fonte de confusão, principalmente porque ainda há muitos eventos no M2. Se sabemos que os eventos estão mortos, podemos codificar de acordo, não vi nenhum lugar que mencione isso nos documentos. Em outras línguas, existem razões para usar eventos algumas vezes e interceptadores outras vezes, acho que você precisa esclarecer que o Magento 2 é diferente.
226 Karen Karen Baker
5

Atualmente, ainda existe a opção de ouvir eventos específicos e eu sugeriria que os interceptores são apenas um substituto para as reescritas. Eu ainda usaria os eventos quando houver um para suas necessidades.

Se você observar a versão atual, alguns dos módulos possuem events.xmlarquivos que incluem as definições.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>
David Manners
fonte
No Magento-2, o padrão de observação da versão mais recente foi alterado. Agora você não precisa declarar o atributo de método em events.xml. Ele executará automaticamente o método de execução, assim como o controlador.
Keyur Shah