Frage

Ich spiele mit Magento 2 herum, bin aber auf ein Problem gestoßen, das ich nicht verstehen kann.Der Objektmanager versucht, die abstrakte Klasse zu instanziieren. Dies führt zu einem schwerwiegenden Fehler.Weiß jemand, was die Ursache dafür sein 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 verfügt über ein Modell, das das erweitert \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 das \Magento\Backend\App\Action und Verwendungen $this->_objectManager->create() um das Modell zu instanziieren.

Was ich mir nicht vorstellen kann, ist, dass es einfach funktioniert, wenn ich das Magento-Modell instanziiere, aber wenn ich mein Modell instanziiere, versucht es, diese abstrakte Klasse zu instanziieren, was den obigen Fehler auslöst.Was weist den Objektmanager dazu an und wie kann ich mein Problem lösen?

Mein erster Gedanke war, dass Magento das verwendet di.xml dies zu ersetzen, dies auszuführen oder so etwas, das war nicht der Fall.

Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen.Wir freuen uns über jede Hilfe oder Anregung zu diesem Thema.

War es hilfreich?

Lösung

Dies kann passieren, wenn Ihre Unterklasse nach den vorhandenen optionalen Abhängigkeiten der übergeordneten Klasse neue Abhängigkeiten hinzufügt.

Ausschnitt aus dem übergeordneten Element

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       //optional
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  //optional
    array $data = [] //optional
)}

Wie Code ändern kann, was optional ist

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       // required (even though it has a default value, because it is followed by parameters that don't have default values)
    int $x, // required
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  // optional (still optional because there are no required parameters following it)
    array $data = [] // optional
)}

Der Magento 2 Object Manager wird versuchen, alle erforderlichen Parameter einzufügen.Dies könnte also passieren, wenn Sie am Ende des Konstruktors einen erforderlichen Parameter hinzugefügt haben.

Sie können dies beheben, indem Sie alle neuen erforderlichen Parameter nach oben über die optionalen verschieben.

Andere Tipps

Manchmal wurden einige Module aktualisiert und die Referenzen unter /generated wurden noch nicht aktualisiert.

Mach einfach ein bin/magento setup:di:compile und versuche es erneut.

(Hat bei mir funktioniert, als ich ein Zahlungsmodul aktualisiert habe und /checkout nicht geladen wurde.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top