Wenn ich mit Magento 2 herumspiele, aber auf ein Problem stoße, kann ich meinen Kopf nicht umwickeln. Der Objektmanager versucht, die Klasse Abstract zu instanziieren. Dies führt zu einem schwerwiegenden Fehler. Weiß jemand, woran das liegen könnte oder weist er mich in die richtige Richtung?
Der Fehler
Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75
Das Problem
Mein Modul hat ein Modell, das die \Magento\Quote\Model\Quote
. Der Konstruktor dieses Modells hat die folgende Zeile, die dies einfügt:
\Magento\Framework\Model\Resource\AbstractResource $resource = null,
.
Der Controller, der das Modell instanziiert, erweitert \Magento\Backend\App\Action
und verwendet $this->_objectManager->create()
, um das Modell zu instanziieren.
Wenn ich das Magento-Modell instanziiere, funktioniert es nur, aber wenn ich mein Modell instanziiere, versucht es, diese abstrakte Klasse zu instanziieren, die den obigen Fehler auslöst. Was sagt der Objektmanager dazu und wie kann ich mein Problem lösen?
Mein erster Gedanke war, dass Magento das verwendet di.xml
, um dies zu ersetzen, dies auszuführen oder so, das war nicht der Fall.
Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen. Jede Hilfe oder Anregung zu diesem Thema wird gebeten.
quelle
__construct
Methode Ihres Modells.Antworten:
Dies kann passieren, wenn Ihre Unterklasse neue Abhängigkeiten nach den vorhandenen optionalen Abhängigkeiten der übergeordneten Klasse hinzugefügt hat.
Ausschnitt vom Elternteil
Wie der Code ändern könnte, was optional ist
Der Magento 2 Object Manager versucht, alle erforderlichen Parameter einzufügen. Dies könnte also passieren, wenn Sie am Ende des Konstruktors einen erforderlichen Parameter hinzufügen.
Sie können dies beheben, indem Sie einen neuen erforderlichen Parameter über die optionalen Parameter stellen.
quelle
Manchmal wurde ein Modul aktualisiert und die Referenzen unter / generated wurden noch nicht aktualisiert.
Mach einfach einen
bin/magento setup:di:compile
und versuche es erneut.(Hat bei mir funktioniert, als ein Zahlungsmodul aktualisiert und / oder die Kasse nicht geladen wurde.)
quelle