Magento 2: Plugin vs Observer


27

In Magento 2, quali sono i pro e i contro dell'utilizzo di un plugin contro un osservatore per ottenere qualcosa?

Comprendo che gli osservatori sono abbonati agli eventi mentre i plug-in possono saltare prima e / o dopo che un metodo pubblico è stato chiamato su una classe Magento, ma sicuramente si stanno avvicinando molto ai percorsi?


l'osservatore sarà molto limitato, ma il plug-in esegue le modifiche per tutte le funzioni pubbliche
Pradeep Kumar,

Risposte:


42

I plug-in sono onnipresenti poiché è possibile modificare / sostituire il comportamento di qualsiasi metodo pubblico nel sistema. Le personalizzazioni devono essere eseguite utilizzando plug-in per metodi / classi pubblici contrassegnati con @apiannotazioni (API pubbliche stabili) quando possibile. Tale approccio garantisce che la personalizzazione rimanga funzionale dopo le nuove versioni di Magento. Oltre a before/ afterplugin menzionate nella questione, è possibile creare aroundplugin per sostituire comportamento originale.

D'altra parte, gli osservatori sono meccanismi di estensione ereditati da Magento 1, è piuttosto limitato e dovrebbe essere evitato se possibile. Tuttavia, a differenza dei plug-in, possono fornire punti di estensione all'interno di metodi protetti / privati.


Dai anche un'occhiata alla risposta parlando di preferenze rispetto a plugin / osservatori: magento.stackexchange.com/a/94035/697 , può essere utile.
Alex Paliarush,

@alex: - come scrivere plug-in per la funzione protetta, nella maggior parte dei casi è necessario sovrascrivere la funzione protetta in quella situazione come si fa? magento.stackexchange.com/questions/91353/…
Pradeep Kumar il

I plugin @PradeepKumar possono essere aggiunti solo a metodi pubblici. La domanda che hai menzionato ha una risposta, ma la soluzione proposta è bloccata ma è noto un problema (i plug-in non possono essere applicati ai tipi virtuali). Come soluzione temporanea puoi dichiarare il plug-in per la classe URL del framework e aggiungere la logica condizionale basata su argomenti (in modo che il plug-in faccia qualcosa solo sul tuo caso)
Alex Paliarush,

ho solo fatto un esempio, in quel caso c'è molta funzione in protetto come sovrascrivere, in ogni modo per scavalcare la funzione protetta
Pradeep Kumar,

@PradeepKumar se è necessario sostituire un metodo protetto, potrebbe essere necessario estendere la classe e utilizzare la preferenza / riscrittura. Ad ogni modo, suggerisci di fare una domanda per questo invece che in questi commenti
Robbie Averill

1

Secondo la guida tecnica Magento ( https://devdocs.magento.com/guides/v2.1/coding-standards/technical-guidelines.html#14-events ): tutti i valori (inclusi gli oggetti) passati a un evento NON DEVONO essere modificato nell'osservatore di eventi. Al contrario, i plugin DOVREBBERO essere utilizzati per modificare l'ingresso o l'uscita di una funzione.

Per me la differenza principale tra plugin e osservatori è:

  1. I plugin possono modificare solo metodi pubblici mentre gli osservatori possono modificare anche privati, protetti.
  2. Esiste un ordinamento per i plugin ma non esiste un ordinamento per gli osservatori.
  3. Puoi aggiungere l'osservatore solo agli eventi che sono già stati inviati in Magento. I plugin sono più flessibili qui.

Posso anche aggiornare un ordine con un osservatore, giusto?
Robbie Averill,

@RobbieAverill sì, è possibile creare un osservatore per l' checkout_submit_all_afterevento. Il tuo osservatore verrà attivato dopo che l'ordine è stato effettuato correttamente.
trasversus

Ciò significa che "non modificano i dati" non è vero in quel caso?
Robbie Averill

1
Sì, hai ragione @RobbieAverill Sia i plugin che gli osservatori possono modificare i dati. Per me la differenza principale tra plugin e osservatori è: 1. I plugin possono modificare solo metodi pubblici mentre gli osservatori possono modificare anche privati, protetti. 2. Esiste un ordinamento per i plugin ma non esiste un ordinamento per gli osservatori. 3. Puoi aggiungere l'osservatore solo agli eventi che sono già stati inviati in Magento. I plugin sono più flessibili qui.
trasversus,
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.