Schwerwiegender Fehler: Schnittstelle in Magento 2 kann nicht instanziiert werden?

21

Als Teil der programmgesteuerten Erstellung eines Produktpakets in Magento 2. Ich erhalte den folgenden Fehler. Sogar ich habe var / cache und generation entfernt.

Dies kann eine doppelte Frage sein, aber keine der Antworten funktioniert für dieses Problem.

Schwerwiegender Fehler: Schnittstelle Magento \ Catalog \ Api \ Data \ ProductExtensionInterface kann in \ ObjectManager \ Factory \ Dynamic \ Developer.php in Zeile 73 nicht instanziiert werden

Wird unten als Verweis auf den Link verwendet

$productExtension = $objectManager->create(\Magento\Catalog\Api\Data\ProductExtensionInterface::class);
$option = $objectManager->create(\Magento\Bundle\Api\Data\OptionInterface::class);
$option->setTitle('Size');
$option->setType('radio');
$option->setRequired(true);
$option->setPosition(1);
//$option->setProductLinks($links);
$productExtension->setBundleOptions([$option]);
$_product->setExtensionAttributes($productExtension);

Ich benutze den Objektmanager für temporäre / schnelle Zwecke, konvertiere den Objektmanager in eine Konstruktor-einstweilige Verfügung.

Jeder kann mir in dieser Angelegenheit helfen.

Krishna ijjada
quelle

Antworten:

20

Ich denke, Sie haben die Präferenz in Ihrer di.xml nicht erwähnt. Ich hatte auch das gleiche Problem, als ich ein benutzerdefiniertes XML-Dateimodul für die Konfiguration erstellte.

Ich habe das Problem erhalten, als ich diesen Code aufgerufen habe:

$testConfig = $this->_objectManager->get('Training\Test\Model\Config\ConfigInterface');
$myNodeInfo = $testConfig->getMyNodeInfo();

Unten ist der Beispielcode, den ich in meiner Datei di.xml hinzugefügt habe. Vielleicht hilft er Ihnen dabei, einen Verweis zu erhalten:

<preference for="Training\Test\Model\Config\ConfigInterface" type="Training\Test\Model\Config" />

Hier habe ich die Schnittstelle in der Training\Test\Model\ConfigKlasse implementiert und meine getMyNodeInfo()Methode ist in diesem Modell definiert.

Ausgehend von der in di.xml definierten Voreinstellung erstellt der Code ->get('Training\Test\Model\Config\ConfigInterface');ein Objekt vom Typ Training\Test\Model\Config.

user49278
quelle
7

Sie sollten das nicht verwenden ObjectManager.

Sammeln Sie Ihre Abhängigkeiten über _constructor.

Falls Ihre Benutzeroberfläche immer noch nicht geladen wird, überprüfen Sie Ihre di.xmlund stellen Sie sicher, dass eine Einstellung verfügbar ist.

David Lambauer
quelle
@ David Lambauer Auch kann ich i - Konstruktor verwendet bin nicht immer instantiate Schnittstelle Magento \ Catalog \ Api \ Data \ ProductExtensionInterface in magento \ Framework \ Object \ Fabrik \ Dynamische \ Developer.php auf Linie 73
Krishna ijjada
1
Haben Sie die Fabrik zu Ihren Verwendungserklärungen hinzugefügt? Verwenden Sie Magento \ Catalog \ Api \ Data \ ProductExtensionInterfaceFactory.
David Lambauer
6

Ich kämpfte damit und fand dann eine Lösung, die für mich in der Dokumentation hier funktioniert .

Stellen Sie sicher, dass Sie Ihre Schnittstelle in der Datei di.xml (korrekt) als Voreinstellung hinzufügen.

Tristanisginger
quelle
2
Mein Problem war, dass ich die Datei di.xml versehentlich im Ordner etc / frontend anstelle des Stammverzeichnisses etc abgelegt habe, aber Ihre Antwort hat mich dazu veranlasst, dies zu finden.
KyleBunga