Masalahnya sudah diketahui: lib
kelas dimuat secara eksklusif melalui autoloader, dan kami tidak dapat mengubahnya selain:
- Menyalinnya seluruhnya ke codePool yang diperiksa lebih awal dari lib.
- Menginstal autoloader PSR-0 , menentukan classmap autoload, dan kemudian menyalin file seluruhnya ke dalam struktur folder itu sebagai gantinya. [solusi saya saat ini]
Saya berada di tempat yang sulit karena saya ingin berpotensi menyentuh banyak file-file ini - tetapi demi kewarasan dan stabilitas / peningkatan kemampuan toko saya tidak ingin menyalin seluruh kelas perpustakaan.
Sekarang jelas ada solusi potensial untuk masalah ini, tetapi mereka semua datang dengan masalah mereka sendiri:
- Buka rute AOP dan gunakan perpustakaan berbasis PHP seperti Go! AOP : Terakhir saya periksa ini akan membutuhkan kelas Magento untuk dimuat oleh komposer autoloader, bukan hanya yang tersedia. Flyingmana telah melakukan beberapa pekerjaan di bidang ini, tetapi sudah pasti tidak siap untuk penggunaan produksi dan kebutuhan saya lebih cepat. Saya juga ingin mengirim sebagai ekstensi, dan itu akan memerlukan lebih banyak pengaturan komposer.
- Buka rute AOP dan gunakan ekstensi PHP asli : Mungkin yang paling menguntungkan saat ini, tetapi akan memerlukan menginstal ekstensi terpisah, belum lagi bahwa itu tidak akan bekerja dengan HHVM.
- Gunakan classkit dan / atau runkit PHP : Ini adalah ekstensi PHP asli lain sehingga memiliki masalah yang sama seperti di atas.
- Patch situs panggilan untuk menggunakan
\Danslo\Varien_X
versi namespaced ( ) saya sendiri , kemudian diperluas dari yang asli (\Varien_X
): Ada terlalu banyak callites untuk ditambal dan itu akan membutuhkan sejumlah penulisan ulang yang konyol. Bukan pilihan. Roll my own: Seharusnya mungkin untuk:
- Tulis autoloader saya sendiri.
- Salin kelas asli ke folder terpisah (
{root_dir}/var/tmp
), bungkus dalamnamespace \Magento { < original contents > }
. - Sertakan file itu.
- Sertakan kelas modifikasi saya
OriginalClass extends Magento\OriginalClass {}
Kelemahan dari ini jelas: pembuatan kode dinamis, regex, sedikit overhead untuk memuat kelas yang ditulis ulang. Tapi saya hampir yakin bahwa pada titik ini akan mengalahkan menyalin ~ 5.000 baris kode ketika saya hanya ingin menyentuh / menambah ~ 100 baris.
Saya tahu saya banyak bertanya, tetapi adakah yang modern dan relatif bersih di luar sana yang membantu menyelesaikan masalah ini?