Kesalahan fatal: Tidak dapat menginstal antarmuka di Magento 2?

21

Sebagai bagian dari membuat produk bundel secara terprogram di Magento 2. Saya mendapatkan kesalahan di bawah ini. Bahkan saya menghapus var / cache dan generasi.

Ini mungkin pertanyaan duplikat tetapi tidak ada jawaban yang berfungsi untuk masalah ini.

Kesalahan fatal: Tidak dapat membuat antarmuka Magento \ Katalog \ Api \ Data \ ProductExtensionInterface di \ ObjectManager \ Factory \ Dynamic \ Developer.php on line 73

Digunakan kode di bawah ini sebagai referensi tautan

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

Saya menggunakan manajer objek untuk tujuan sementara / cepat, akan mengubah manajer objek menjadi perintah konstruktor.

Siapa pun dapat membantu saya dalam masalah ini.

Krishna ijjada
sumber

Jawaban:

20

Saya pikir Anda belum menyebut preferensi di di.xml Anda. Saya juga menghadapi masalah yang sama ketika saya membuat modul file xml konfigurasi khusus.

Saya mendapatkan masalah ketika saya memanggil kode ini:

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

Di bawah ini adalah contoh kode yang telah saya tambahkan di di.xml saya , mungkin dapat membantu Anda untuk mendapatkan referensi:

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

Di sini saya telah mengimplementasikan antarmuka di Training\Test\Model\Configkelas dan getMyNodeInfo()metode saya didefinisikan dalam Model itu.

Jadi berdasarkan preferensi yang ditentukan dalam di.xml kode ->get('Training\Test\Model\Config\ConfigInterface');akan membuat objek bertipe Training\Test\Model\Config.

pengguna49278
sumber
7

Anda sebaiknya tidak menggunakan ObjectManager.

Kumpulkan dependensi Anda melalui _constructor.

Jika antarmuka Anda tidak akan dimuat, periksa di.xmldan validasi bahwa preferensi tersedia.

David Lambauer
sumber
@ David Lambauer Bahkan saya menggunakan constructor saya mendapatkan Can tidak instantiate antarmuka Magento \ Katalog \ Api \ Data \ ProductExtensionInterface di Magento \ framework \ ObjectManager \ Pabrik \ Dinamis \ Developer.php on line 73
Krishna ijjada
1
Apakah Anda menambahkan pabrik ke pernyataan penggunaan Anda? gunakan Magento \ Catalog \ Api \ Data \ ProductExtensionInterfaceFactory;
David Lambauer
6

Saya berjuang dengan ini dan kemudian menemukan solusi yang bekerja untuk saya dalam dokumentasi di sini.

Pastikan untuk menambahkan antarmuka Anda sebagai preferensi (dengan benar) di di.xml.

Tristanisginger
sumber
2
Masalah saya adalah bahwa saya meletakkan di.xml di folder etc / frontend bukannya root dll secara tidak sengaja, tetapi jawaban Anda membuat saya menemukannya.
KyleBunga