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.