Magento 2 zawiera wiele plików klas, które są wstępnie generowane lub generowane w locie. Oni żyją w
var/generated
Wygenerowane pliki obejmują klasy fabryczne. Z dokumentacji rozumiem, że programista używa klas fabrycznych do tworzenia obiektów „niewtryskiwalnych”. Obiekt „nienadający się do wstrzyknięcia” to obiekt, którego nie można dodać za pomocą __constructor
wstrzykiwania zależności, zwykle dlatego, że wymaga on danych wejściowych użytkownika do utworzenia wystąpienia.
Z dokumentacji nie wynika jasno, skąd Magento 2 wie, że musi wygenerować klasę fabryczną. Ten kawałek
Jeśli menedżer obiektów w trybie wykonawczym lub kompilatorze napotka nieistniejącą fabrykę, menedżer obiektów wygeneruje fabrykę.
wygląda na to, że jeśli użyję klasy fabrycznej w menedżerze obiektów (lub, co za tym idzie, we wstrzykiwaniu zależności __konstruktorów), Magento 2 wygeneruje ją dla mnie. Ale skąd menedżer obiektów wie, że to, o co proszę, to fabryka?
Wydaje się również, że istnieją dwa polecenia do automatycznego generowania (lub „kompilowania”) wszystkich generowanych klas. Uruchomienie jednego z tych poleceń generuje dużą liczbę klas Factory. Jakich plików konfiguracyjnych i / lub kodowych oczekują te polecenia, aby wygenerować potrzebne obiekty fabryczne?
Wiem, że śledzenie menedżera obiektów i / lub kodu poleceń do końca ujawniłoby to, ale mam nadzieję uniknąć tej długiej i żmudnej podróży.
źródło
W tej chwili kopię tę samą zupę grochową. Jak dotąd rozumiem, że wszystkie rzeczy generowane automatycznie
/var/generation
są wykonywane na podstawie preferencji i interfejsów zadeklarowanych wapp/etc/di.xml
.Twoje interfejsy i preferencje zostaną zadeklarowane w
di.xml
pliku w twoim/app/code/Vendor/<module>/etc/di.xml
.Wie, aby wygenerować dla Ciebie obiekt (y), ponieważ zadeklarowałeś interfejs w swoim
__constructor
AND i zadeklarowałeś preferencje dla tego interfejsu globalnie lub lokalnie w odpowiednimdi.xml
pliku.Z moimi komentarzami oferuję trzy ziarna soli.
źródło
di.xml
plikami - możesz wysłać coś do menedżera obiektów, który kończy się na Fabryce, i wygeneruje dla ciebie plik.