Bağımlılık Enjeksiyon Sistemi ile Magento 2'de Magento 1 Sınıfı Yeniden Yazma


10

Kurcalama Magento 2'nin çekirdek kodunda eski sınıf yeniden yazma sistemi sökülüp yeni bağımlılık enjeksiyon sistemi ile değiştirilmiştir gibi görünüyor.

Ne yazık ki, bu yeni sistem için hiçbir belge yok .

Herkesin Magento 2'de yeni bağımlılık enjeksiyon sistemini kullanarak Mage_Catalog_Model_Productsınıfı yeni bir sınıfla "yeniden yazmasına" izin verecek bir modül yapılandırma örneği var Packagename_Modulename_Model_Productmı?


Magento 2.0 sorularına henüz izin verilmediğini sanıyordum meta.magento.stackexchange.com/questions/79/…
Marius

Yanıtlar:


10

Di yapılandırması di.xml dosyalarına taşındı ve biçim değiştirildi. Şimdi tercihler şuna benziyor (di.xml):

<config>
    <preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>

sınıf yeniden yazma ise, tercih düğümü yerine bir eklenti kullanmak tercih edilir mi?
huzefam

2
Bazı çekirdek sınıfların davranışlarının yerine geçmeniz gerekiyorsa, tercihi kullanmalısınız. Bazı temel yöntemin davranışını değiştirmeniz gerekiyorsa, $ progress () öğesini çağırmayacak eklentiyle birlikte eklentiyi kullanmalısınız. Bazı çekirdek yöntemlere veya sınıfa davranış eklemeniz gerekiyorsa, eklentiler kullanmalısınız.
Anton Kril

5

İçten dışa doğru çalışarak, aşağıdakilerle çalışan bir yeniden yazma elde etmeyi başardım

<global>    
    <di>    
        <preferences>
            <Mage_Catalog_Model_Product>Packagename_Modulename_Model_Product</Mage_Catalog_Model_Product>
        </preferences> 
    </di>
</global>

Bununla birlikte, bağımlılık enjeksiyon uygulamasında çok daha fazla sistem kodu var, bu yüzden yukarıdakilerin Magento 2'nin son yayınlanan sürümünde çalışıp çalışmayacağı belli değil.


Öyleyse temelde tercihlere "takma ad" adını verdiler ve en üste mi taşıdılar? İlginç. Dokümantasyondaki güncellemeleri görmek için sabırsızlanıyorum. Peter sahip olduklarını söyledi, ancak bunların hepsi en azından IIRC olmak üzere dokümanlar sitesine gönderilmedi.
davidalger

5

Haklısın, sınıf yeniden yazma işlemleri tamamen ortadan kaldırıldı ve DI ile değiştirildi. Aşağıdaki notlar Uygulama Çerçevesi değişiklikleri bölümündedir :

Magento 1.x - Düğüm: / global // {fabrika adı + "yeniden yazma" değişmezine karşılık gelen alt yol}

<global>
...
    <models>
        <core>
            <rewrite>
                <url>My_Module_Model_Url</url>
            </rewrite>
        </core>
    </models>
...
</global>

Magento 2.x - Düğüm: / global / di / takma adlar

<global>
...
    <di>
        <aliases>
            <Mage_Core_Model_Url>My_Module_Model_Url</Mage_Core_Model_Url>
        </aliases>
    </di>
...
</global>

Bu Magento 2.0 çalışan bir modülde kullanmayı denemedim, ama temelde, modül başına yeniden yazma için karmaşık xml karmaşık hiyerarşisi yerine sınıf adı için bir diğer ad tanımlamak gibi görünüyor.


1
Uygulama Çerçevesi sayfası için +1, ancak bu, yakaladığım en son Magento 2 anlık görüntüsünde çalışmıyor.
Alan Storm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.