Magento 2: quale meccanismo di estensione scegliere?


9

Possiamo estendere il controller in due modi: usando le preferenze e usando il plugin. Ma non lo capisco, quale è buono e vantaggi / svantaggi delle preferenze rispetto al plug-in.

<preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" />

<type name="Magento\Catalog\Model\Product">
    <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/>
</type>

Possibile duplicato di Magento 2: Plugin vs Observer
7

Risposte:


11

Usa i plug-in quando possibile, quindi gli osservatori (vedi i pro ei contro di ciascuno ), questo ti permetterà di evitare conflitti con altre estensioni (moduli di terze parti).

La preferenza dovrebbe essere utilizzata solo se l'intera implementazione della classe principale / dell'interfaccia deve essere sostituita con una personalizzata. Tieni presente che è attiva una sola preferenza in qualsiasi momento (quale è definita dalla sequenza definita in module.xml), quindi se un'altra estensione definisce la preferenza per la stessa classe / interfaccia, si verificherà un conflitto (queste estensioni non possono funzionare insieme).


4
  • Se la tua funzionalità sostituisce completamente la funzionalità principale, puoi utilizzare le preferenze.
  • Se si desidera aggiungere la funzionalità alla base o sostituire parzialmente un metodo di classe, utilizzare plug-in.

1
Sembra prudente notare che se si sostituisce la funzionalità principale, l'onere di monitorare i principali aggiornamenti e garantire l'aggiornamento dei moduli personalizzati è a carico dell'utente
Robbie Averill

1

informazioni pubblicitarie: quasi tutte le preferenze utilizzate in intern m2 sono solo per mantenere la relazione tra la classe di base di cemento e l'interfaccia, come:

<preference for="Magento\Store\Model\StoreManagerInterface" type="Magento\Store\Model\StoreManager" />

come nel caso in cui viene utilizzato una volta penso:

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
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.