Risposte:
Non credo che l'intercettazione abbia lo scopo di sostituire gli osservatori di eventi.
Ci sono ancora eventi inviati nel codice Magento2.
Gli intercettori sono solo un modo per elaborare l'input o l'output di un metodo.
O il comportamento di un metodo (usando l' around
interceptor) ma da quello che capisco questo è un approccio rischioso.
Penso che sia più un modo per evitare il più possibile le riscritture di classe.
In Magento 1.x, se è necessario modificare il risultato di un metodo, è necessario sovrascrivere la classe che contiene e il metodo stesso.
ora si può semplicemente utilizzare before
, after
o around
intercettori per manipolare i dati.
Con gli osservatori è possibile manipolare i dati in determinati punti fissi di un metodo, non l'intero metodo stesso.
A mio avviso, l'utilizzo di osservatori quando possibile è ancora l'approccio migliore per la personalizzazione anche in Magento 2.
L'intercettazione è evoluzione degli eventi. Il suo obiettivo è consentire a uno sviluppatore di scrivere il suo codice senza pensare ai punti di estensione.
Con gli eventi devi pensare ai luoghi in cui fai Mage :: dispatchEvent () in modo che il tuo modulo sia personalizzabile.
L'intercettazione ti consente di non pensarci. Devi solo scrivere la tua logica aziendale. Ogni chiamata di metodo è un evento. Quindi, se scrivi il tuo codice in modo adeguato orientato agli oggetti, sarà completamente personalizzabile in base alla progettazione.
Ma gli eventi forniscono un livello superiore di servizi forniscono un'interfaccia che parla il linguaggio degli affari. Quindi gli eventi rimarranno in Magento 2.
Al momento esiste ancora la possibilità di ascoltare eventi specifici e suggerirei che gli intercettori sono solo un sostituto per le riscritture. Userei ancora gli eventi quando ce n'è uno in atto per le tue esigenze.
Se guardi alla versione corrente alcuni dei moduli hanno events.xml
file che includono le definizioni.
<event name="cms_wysiwyg_images_static_urls_allowed">
<observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer" />
</event>