Sorun iyi bilinmektedir: lib
sınıflar yalnızca otomatik yükleyici aracılığıyla yüklenir ve aşağıdakiler dışında bunları değiştiremeyiz:
- Bunları tamamen lib'den daha önce kontrol edilen bir codePool'a kopyalamak.
- Yükleme PSR-0 autoloader , bir özdevinimli_yükle ClassMap belirterek, sonra yerine o klasör yapısına tamamen dosyayı kopyalarken. [mevcut çözümüm]
Zor bir noktadayım çünkü bu dosyaların birçoğuna potansiyel olarak dokunmak istiyorum - ancak aklım ve istikrarım / mağazanın yükseltilebilirliği uğruna tüm kütüphane derslerini kopyalamak istemiyorum.
Şimdi açık bir şekilde bu sorunun potansiyel çözümleri var, ancak hepsi kendi problemleriyle geliyor:
- AOP güzergahına gidin ve Go! AOP : Son kontrol ettiğimde Magento sınıflarının sadece bir tane değil, besteci otomatik yükleyici tarafından yüklenmesini gerektiriyor. Flyingmana bu alanda bazı çalışmalar yaptı ancak üretim kullanımına kesinlikle hazır değil ve ihtiyaçlarım daha acil. Ayrıca bir uzantı olarak gönderilmek istiyorum ve bu daha çok besteci ayarlaması gerektiriyor.
- AOP rotasına gidin ve yerel bir PHP uzantısı kullanın : Bu noktada muhtemelen en uygun olanıdır, ancak HHVM ile çalışmayacağını belirtmek yerine ayrı bir uzantı kurmanız gerekir.
- PHP'nin sınıf setini ve / veya runkit'ini kullan : Başka bir yerel PHP eklentisidir, bu yüzden yukarıdakiyle aynı problemi yaşar.
- Çağrı alanlarını kendi namespaced (
\Danslo\Varien_X
)\Varien_X
sürümümü kullanmak için yamalayın , sonra orijinalinden ( ) uzayın: Yama eklemek için çok fazla çağrı alanı vardır ve aptalca bir miktar yeniden yazma gerektirir. Bir seçenek değil. Kendi yuvarla: Mümkün olmalıdır:
- Kendi otomatik yükleyicimi yaz.
- Orijinal sınıfı ayrı bir klasöre (
{root_dir}/var/tmp
) kopyalayın , içine sarınnamespace \Magento { < original contents > }
. - Bu dosyayı ekle.
- Değiştirilmiş sınıfımı dahil et
OriginalClass extends Magento\OriginalClass {}
Bunun dezavantajı açıktır: Dinamik kod oluşturma, regex, yeniden yazılmış sınıfları yüklemek için biraz ek yük. Ancak bu noktada, sadece ~ 100 satır eklemek / eklemek istediğimde ~ 5000 satır kod kopyalamayı yeneceğinden neredeyse eminim.
Çok şey sorduğumu biliyorum, ama bu sorunun çözülmesine yardımcı olacak modern ve nispeten temiz bir şey var mı?