Błąd krytyczny: Nie można utworzyć instancji interfejsu w Magento 2?

21

W ramach tworzenia produktu pakietowego programowo w Magento 2. Mam błąd. Nawet usunąłem var / cache i generację.

To może być duplikat pytania, ale żadna z odpowiedzi nie działa w przypadku tego problemu.

Błąd krytyczny: Nie można utworzyć interfejsu Magento \ Catalog \ Api \ Data \ ProductExtensionInterface w \ ObjectManager \ Factory \ Dynamic \ Developer.php w linii 73

Używany poniżej kodu jako odnośnika do linku

$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);

Używam menedżera obiektów do celów tymczasowych / szybkich, przekonwertuję menedżera obiektów na polecenie konstruktora.

Każdy może mi pomóc w tej sprawie.

Krishna ijjada
źródło

Odpowiedzi:

21

Myślę, że nie wspomniałeś o preferencjach w swoim pliku di.xml. Ten sam problem napotkałem również podczas tworzenia niestandardowego modułu pliku XML konfiguracji.

Mam problem, kiedy zadzwoniłem do tego kodu:

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

Poniżej znajduje się przykładowy kod, który dodałem w pliku di.xml , może być pomocny w uzyskaniu referencji:

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

Tutaj zaimplementowałem interfejs w Training\Test\Model\Configklasie, a moja getMyNodeInfo()metoda jest zdefiniowana w tym modelu.

Zatem na podstawie preferencji zdefiniowanych w di.xml kod ->get('Training\Test\Model\Config\ConfigInterface');utworzy obiekt typu Training\Test\Model\Config.

użytkownik49278
źródło
7

Nie powinieneś używać ObjectManager.

Zbierz swoje zależności za pośrednictwem _constructor.

Jeśli Twój interfejs nadal nie zostanie załadowany, sprawdź di.xmli sprawdź, czy preferencja jest dostępna.

David Lambauer
źródło
@ David Lambauer Nawet użyłem konstruktora dostaję Nie mogę utworzyć interfejsu Magento \ Catalog \ Api \ Data \ ProductExtensionInterface w magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.php na linii 73
Krishna ijjada 13.10
1
Czy dodałeś fabrykę do instrukcji użytkowania? użyj Magento \ Catalog \ Api \ Data \ ProductExtensionInterfaceFactory;
David Lambauer,
6

Zmagałem się z tym, a następnie znalazłem rozwiązanie, które zadziałało dla mnie w dokumentacji tutaj.

Pamiętaj, aby dodać swój interfejs jako preferencję (poprawnie) w pliku di.xml.

Tristanisginger
źródło
2
Mój problem polegał na tym, że umieściłem plik di.xml w folderze etc / frontend zamiast katalogu głównego etc, ale twoja odpowiedź doprowadziła mnie do znalezienia tego.
KyleBunga