Tanggal: 30 Mei 2015 (mengingat sifat Magento 2 yang berubah).
Magento 2 memperkenalkan konsep plugin , diimplementasikan melalui pola interseptor .
Apa yang tidak jelas dari dokumen adalah - kelas dan objek mana di Magento yang "mampu mencegat"? Artinya, Anda mengkonfigurasi plugin dengan XML yang terlihat seperti berikut ini
<config>
<type name="{ObservedType}">
<plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/>
</type>
</config>
tetapi tidak jelas kelas mana yang valid sebagai ObservedType
. Ini artikel wiki tua memberikan beberapa petunjuk ketika ia mengatakan
Harap dicatat bahwa fitur plugin tidak berlaku untuk - Kelas yang dibuat tanpa injeksi ketergantungan, yaitu, dibuat dengan operator baru secara langsung, -Final metode, -Final kelas
Apakah ada objek yang dibuat melalui injeksi dependensi yang tersedia untuk dicegat? Apakah ObservedType
kebutuhan untuk menjadi petunjuk tipe yang disediakan dalam suatu __construct
metode, atau bisakah itu (haruskah) menjadi sesuatu yang lain?
Terutama mencoba mencari tahu apa yang bisa dan tidak bisa dilakukan dengan pencegat Magento 2 sebelum saya mulai menggunakannya.
sumber
Kami sedang mengerjakan anotasi "@api" untuk membubuhi keterangan metode yang direkomendasikan yang akan lebih stabil di seluruh rilis. Jika Anda khawatir tentang peningkatan kemampuan, sebagai tambahan terhadap apa yang dapat ditentukan oleh sebuah plugin, Anda juga harus mempertimbangkan apa yang seharusnya menentukan suatu plugin. Kami tidak merekomendasikan intersepsi metode non-api, tetapi kadang-kadang kami tahu itu mungkin pilihan terbaik. (Kami menyerahkannya pada kebijaksanaan pengembang.)
Secara resmi, Anda dapat mencegat metode publik yang tidak final. Metode pribadi pasti tidak akan berhasil. Dari memori, intersepsi saat ini bekerja dengan menciptakan kelas turunan yang mewarisi kelas nyata (kerangka kerja injeksi ketergantungan menciptakan instance dari kelas yang dihasilkan ketika Anda meminta instance baru dari kelas nyata). Jadi apa pun yang akan memungkinkan sub-kelas untuk dibuat dan metode asli yang ditimpa mungkin akan berfungsi, tetapi metode publik direkomendasikan, memberi kami fleksibilitas untuk menggunakan beberapa implementasi pintar lainnya di masa depan (yang tidak akan pernah terjadi menjadi realistis tanpa alasan yang baik) .
sumber
Saya tahu ini sudah memiliki jawaban, tetapi berasal dari 2 tahun yang lalu. Mungkin beberapa hal berubah sementara itu.
Inilah yang saya temukan sejauh ini.
Dari dokumentasi resmi dan dari penggalian ke dalam proses intersepsi.
Saya akan menjawab sebaliknya.
Apa yang TIDAK BISA dicegat di Magento 2.
Dari dokumen resmi
Dari menggali sekitar
\Magento\Framework\Phrase
)\Magento\Framework\ObjectManager\NoninterceptableInterface
. (Misalnya\Magento\Framework\App\Cache\Proxy
dan semua proksi yang diautogenerasi lainnya)sumber