Magento 2: Mekanisme ekstensi mana yang harus dipilih?

9

Kita dapat memperluas pengontrol dengan dua cara: menggunakan preferensi dan menggunakan plugin. Tapi saya tidak mengerti itu, mana yang bagus dan kelebihan / kekurangan dari preferensi vs plugin.

<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>
Anand Ontigeri
sumber
Kemungkinan duplikat Magento 2: Plugin vs Observer
7ochem

Jawaban:

11

Gunakan plugin jika memungkinkan, kemudian pengamat (lihat pro dan kontra dari masing-masing ), ini akan memungkinkan Anda untuk menghindari konflik dengan ekstensi lain (modul pihak ke-3).

Preferensi harus digunakan hanya jika implementasi seluruh kelas inti / antarmuka harus diganti dengan kebiasaan. Pertimbangkan bahwa hanya satu preferensi yang aktif setiap saat (yang mana, ditentukan oleh urutan yang ditentukan dalam module.xml), jadi jika ekstensi lain mendefinisikan preferensi untuk kelas / antarmuka yang sama, akan ada konflik (ekstensi ini tidak dapat bekerja bersama-sama).

Alex Paliarush
sumber
4
  • Jika fungsionalitas Anda sepenuhnya menggantikan fungsionalitas inti maka Anda dapat menggunakan preferensi.
  • Jika Anda ingin menambahkan fungsionalitas ke pangkalan atau mengganti sebagian metode kelas maka silakan gunakan plugin.
KAndy
sumber
1
Tampaknya bijaksana untuk dicatat bahwa jika Anda mengganti fungsionalitas inti maka beban ada pada Anda untuk memantau pembaruan inti dan memastikan modul khusus Anda mutakhir
Robbie Averill
1

adittional info: hampir semua preferensi yang digunakan dalam magang m2 itu hanya untuk menjaga hubungan antara kelas beton dasar dan antarmuka, seperti:

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

seperti yang Anda gunakan satu kali saya pikir:

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
Ibnab
sumber