Bawię się Magento 2, ale napotykam problem, którego nie mogę zawinąć. Menedżer obiektów próbuje utworzyć instancję klasy Abstract, co powoduje błąd krytyczny. Czy ktoś wie, co może to spowodować lub skierować mnie w dobrym kierunku?
Błąd
Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75
Problem
Mój moduł ma model, który rozszerza \Magento\Quote\Model\Quote
. Konstruktor tego modelu ma następującą linię:
\Magento\Framework\Model\Resource\AbstractResource $resource = null,
.
Kontroler, który tworzy instancję modelu, rozszerza \Magento\Backend\App\Action
i używa $this->_objectManager->create()
do tworzenia instancji modelu.
Rzeczą, której nie mogę owinąć wokół głowy, jest to, że jeśli utworzę instancję modelu Magento, to po prostu działa, ale jeśli utworzę instancję mojego modelu, spróbuje utworzyć instancję tej abstrakcyjnej klasy, zgłaszając błąd powyżej. Co mówi menedżerowi obiektów, aby to zrobił i jak mogę rozwiązać mój problem?
Moją pierwszą myślą było to, że Magento używa tego di.xml
do zastąpienia tego, wykonania tego czy czegoś, to nie było tak.
Dzięki za poświęcenie czasu na przeczytanie tego. Każda pomoc lub wkład w tę kwestię jest mile widziany.
źródło
__construct
metodę twojego modelu.Odpowiedzi:
Może się to zdarzyć, jeśli podklasa dodała nowe zależności po istniejących opcjonalnych zależnościach klasy nadrzędnej.
Urywek od rodzica
Jak kod może zmienić to, co opcjonalne
Magento 2 Object Manager spróbuje wprowadzić wszystkie wymagane parametry. Może się tak zdarzyć, jeśli dodasz wymagany parametr na końcu konstruktora.
Możesz to naprawić, przesuwając dowolny nowy wymagany parametr powyżej opcjonalnych.
źródło
Czasami niektóre moduły były aktualizowane, a odniesienia w / generowane nie były jeszcze aktualizowane.
Po prostu zrób
bin/magento setup:di:compile
i spróbuj ponownie.(Pracowało dla mnie podczas aktualizacji modułu płatności i / zamówienie nie zostało załadowane)
źródło