L'intercettazione in magento2 sostituisce gli osservatori in magento1?


9

L'intercettazione intende essere il metodo preferito quando si tratta di cambiare il comportamento di un metodo originale in Magento2 come gli osservatori erano in magento1?

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

Risposte:


16

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' aroundinterceptor) 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, aftero aroundintercettori 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.


2
Essere d'accordo. L'intercettazione è un meccanismo di livello inferiore. Ma non sostituisce gli eventi. Gli eventi forniscono un'interfaccia di livello superiore per i fornitori di servizi
Anton Kril,

6

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.


Puoi per favore far conoscere questo fatto importante in devdocs come fonte di confusione, soprattutto visto che hai ancora molti eventi in M2. Se sappiamo che gli eventi sono morti possiamo codificare di conseguenza, non ho visto da nessuna parte che menziona questo nei documenti. In altre lingue ci sono ragioni per usare eventi a volte e intercettori altre volte, penso che sia necessario chiarire che Magento 2 è diverso.
Karen Baker,

5

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.xmlfile che includono le definizioni.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>

Nell'ultima versione di Magento-2 il modello di osservatore è stato modificato. Ora non è necessario dichiarare l'attributo del metodo in events.xml, verrà eseguito automaticamente il metodo di esecuzione, proprio come il controller.
Keyur Shah,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.