Di Magento 1 saya bisa menyalin kelas abstrak ke direktori lokal atau komunitas dan Magento menggunakannya, ketika memuat secara otomatis kelas ini.
Apakah ada beberapa solusi untuk membuat Magento memuat kelas saya sebagai gantinya vendor/magento/framework/Model/AbstractModel.php
?
Preferensi dalam di.xml
untuk kelas abstrak tidak berfungsi. Hanya plugin?
Solusi lengkap: sertakan kelas yang diganti sebelum magento diisi ulang secara otomatis. Jadi langkah demi langkah:
Dalam file
app/etc/NonComposerComponentRegistration.php
tambahkan barisDi
app/etc
tempat fileClassReplacer.php
dengan kontenTempatkan ke
app/code/Magento
beberapa kelas, yang akan diganti, misalnyaapp/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php
sumber
Jika kelas abstrak memiliki metode publik atau dilindungi yang ingin Anda timpa, ada cara sebenarnya jika Anda tidak dapat menggunakan plugin.
Saya harus mengganti metode
_processDownload
di dalam\Magento\Downloadable\Controller\Download
, menambahkan beberapa 'jika-s' di dalamnya. (Jika ada yang tahu bagaimana saya bisa menambahkan sesuatu seperti ini di dalam metode menggunakan plugin saya akan berterima kasih). Kelas abstrak sehingga preferensi tidak berfungsi. Plugin juga, karena metode dilindungi. Hal yang harus saya lakukan adalah mengganti semua kelas dariDownload
, menggunakan preferensi. Kelas-kelas ini:Magento\Downloadable\Controller\Download\Link
Magento\Downloadable\Controller\Download\LinkSample
Magento\Downloadable\Controller\Download\Sample
Dan di dalamnya menulis ulang metode dari kelas induk (yang seharusnya saya timpa). Jadi sebenarnya kode metode yang ditimpa disalin ke tiga tempat dan persis sama.
Itu tidak ideal tetapi, berhasil.
sumber
Anda dapat mencoba menggunakan Plugin Magento untuk meningkatkan fungsionalitas yang ada dari setiap kelas Abstrak, meskipun cakupan fungsi harus Umum. Baru-baru ini saya bekerja pada masalah yang sama di mana saya harus mengecualikan produk yang memiliki atribut khusus yang ditetapkan dari daftar produk yang baru dilihat .
Saya menggunakan plugin untuk fungsi bernama getItemsCollection dari kelas bernama Magento \ Reports \ Block \ Product \ AbstractProduct menggunakan sintaks berikut:
file: app \ code \ Package \ Module \ etc \ frontend \ di.xml
file: app \ code \ Package \ Module \ Block \ Dilihat.php
Anda dapat menggunakan sekitar juga sebelum plugin juga. Semoga ini berhasil untuk Anda.
sumber