Magento 1 Class Rewrite in Magento 2 with Dependency Injection System


10

Jeśli chodzi o podstawowy kod Magento 2 , wygląda na to, że stary system przepisywania został usunięty i zastąpiony nowym systemem wstrzykiwania zależności.

Niestety nie ma dokumentacji dla tego nowego systemu.

Czy ktoś ma próbkę konfiguracji modułu, która pozwoliłaby użytkownikowi w Magento 2 „przepisać” klasę Mage_Catalog_Model_Productnową klasą Packagename_Modulename_Model_Product, używając nowego systemu wstrzykiwania zależności?


Myślałem, że pytania Magento 2.0 nie są jeszcze dozwolone meta.magento.stackexchange.com/questions/79/…
Marius

Odpowiedzi:


10

Konfiguracja Di została przeniesiona do plików di.xml, a format został zmodyfikowany. Teraz preferencje wyglądają tak (di.xml):

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

jeśli jest to przepisywanie klas, czy lepiej jest używać wtyczki zamiast węzła preferencji?
huzefam

2
Jeśli chcesz zastąpić zachowanie jakiejś klasy podstawowej, powinieneś użyć preferencji. Jeśli chcesz zastąpić zachowanie jakiejś podstawowej metody, powinieneś użyć wtyczki dookoła detektora, która nie wywoła $ progress (). Jeśli chcesz dodać zachowanie do podstawowej metody lub klasy, powinieneś użyć wtyczek.
Anton Kril

5

Pracując od wewnątrz, mogłem uzyskać przepisanie, pracując z następującymi

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

Jednak w implementacji wstrzykiwania zależności jest o wiele więcej kodu systemowego, więc nie jest jasne, czy powyższe będzie działać w końcowej wersji Magento 2.


Wygląda na to, że zmienili nazwę preferencji na „alias” i przenieśli ją na szczyt? Ciekawy. Z niecierpliwością czekam na wprowadzenie aktualizacji dokumentacji. Peter powiedział, że mają, ale to wszystko nie zostało wypchnięte na stronę z dokumentami, przynajmniej IIRC.
davidalger,

5

Masz rację, przepisywanie klas zostało całkowicie wyeliminowane i zastąpione DI. Poniższe uwagi pochodzą z sekcji poświęconej zmianom struktury aplikacji :

Magento 1.x - Węzeł: / global // {ścieżka podrzędna odpowiadająca nazwie fabryki + literał „przepisać”}

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

Magento 2.x - Węzeł: / global / di / aliases

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

Nie próbowałem wykorzystywać tego w module działającym w Magento 2.0, ale wygląda na to, że w zasadzie definiujesz alias dla nazwy klasy, zamiast używać skomplikowanej hierarchii xml do przeróbek poszczególnych modułów.


1
+1 dla strony Application Framework, ale to nie działa w najnowszej migawce Magento 2, którą wziąłem.
Alan Storm,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.