Magento 2 - Manajer objek mencoba untuk membuat instance kelas abstrak. ( Kesalahan fatal )

37

Bermain-main dengan Magento 2 tetapi mengalami masalah saya tidak bisa membungkus kepala saya. Manajer objek mencoba untuk membuat instance kelas abstrak, ini memberikan kesalahan fatal. Apakah ada yang tahu apa yang menyebabkan ini atau mengarahkan saya ke arah yang benar?

Kesalahan

Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75

Masalah

Modul saya memiliki model yang memperpanjang \Magento\Quote\Model\Quote. Konstruktor model ini memiliki baris berikut menyuntikkan ini:

\Magento\Framework\Model\Resource\AbstractResource $resource = null,.

Pengontrol yang membuat instance model memperluas \Magento\Backend\App\Actiondan menggunakan $this->_objectManager->create()untuk membuat instance model.

Hal yang saya tidak dapat membungkus kepala saya adalah jika saya instantiate model Magento itu hanya berfungsi tetapi jika saya instantiate model saya ia mencoba untuk instantiate kelas abstrak ini melempar kesalahan di atas. Apa yang memberitahu manajer objek untuk melakukan ini dan bagaimana saya bisa menyelesaikan masalah saya?

Pikiran pertama saya adalah Magento menggunakan di.xmluntuk mengganti ini, menjalankan ini atau sesuatu, ini tidak terjadi.

Terima kasih telah meluangkan waktu untuk membaca ini. Setiap bantuan atau masukan tentang masalah ini sangat kami hargai.

rofavadeka
sumber
dapatkah Anda memposting kode dalam pertanyaan?
Marius
Mungkinkah Anda sedikit lebih spesifik? Seluruh kelas kontroler dan model instantiated sangat besar dan menambahkannya ke pertanyaan tidak membuatnya lebih mudah untuk memahami masalah awal. Apakah fungsi tindakan atau konstruktor cukup?
rofavadeka
Cukup adil. Posting nama kelas Anda, apa yang diperluas, apa itu mengimplementasikan dan __constructmetode model Anda.
Marius
Seperti yang diminta :) bagian atas model. Saya pikir Chris punya solusinya, akan menguji ini dan membalas Anda. Marius terima kasih.
rofavadeka
Ya. Saya pikir Chris mengerti. :)
Marius

Jawaban:

109

Ini dapat terjadi jika sub-kelas Anda menambahkan dependensi baru setelah dependensi opsional yang ada dari kelas induk.

Cuplikan dari orang tua

    \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
)}

Bagaimana kode dapat mengubah apa yang opsional

    \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
)}

Manajer Objek Magento 2 akan mencoba menyuntikkan parameter yang diperlukan. Jadi ini bisa terjadi jika Anda menambahkan parameter yang diperlukan di akhir konstruktor.

Anda dapat memperbaikinya dengan memindahkan parameter yang diperlukan baru di atas yang opsional.

Chris O'Toole
sumber
1
Chris, Anda telah menerima Terima Kasih Besar! Anda memecahkan masalah saya waktu besar.
rofavadeka
Dan BESAR BESAR, TERIMA KASIH. I love you bro
Yonn Trimoreau
Solusi @Chris yang disediakan oleh Anda membantu saya, terima kasih
Mukesh
Penjelasan hebat!
Henry Bui
Masalah saya adalah bahwa ketika menggunakan lengkapi-otomatis di phpStorm, gagal juga membawa bagian = null: /
OZZIE
0

Kadang-kadang beberapa modul diperbarui dan referensi di bawah / dihasilkan belum diperbarui.

Lakukan saja bin/magento setup:di:compiledan coba lagi.

(Bekerja untuk saya ketika memperbarui modul pembayaran dan / checkout tidak memuat)

Ricardo Martins
sumber