Magento 2 - Nesne yöneticisi Abstract sınıfını başlatmaya çalışıyor. ( Ölümcül hata )


37

Magento 2 ile oynamak ancak bir sorunla karşılaşmak kafamı saramıyorum. Nesne yöneticisi, Abstract sınıfını somutlaştırmaya çalışır, bu bir Ölümcül Hata verir. Birisi buna neyin sebep olabileceğini biliyor veya beni doğru yöne işaret ediyor mu?

Hata

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

Sorun

Modülümde bir model var \Magento\Quote\Model\Quote. Bu modelin yapıcısı, bu enjekte eden aşağıdaki çizgiye sahiptir:

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

Modeli harekete geçiren denetleyici, modeli harekete geçirmek için genişletir \Magento\Backend\App\Actionve kullanır $this->_objectManager->create().

Kafamı dolaştıramayacağım şey, Magento modelini başlatmamın işe yaramasıdır, ancak modelimi başlatırsam, yukarıdaki hatayı fırlatan bu soyut sınıfı başlatmaya çalışır. Nesne yöneticisine bunu yapmalarını söyleyen nedir ve sorunumu nasıl çözebilirim?

İlk düşüncem, Magento'nun di.xmlbunu değiştirmek, bunu yürütmek ya da bir şey yapmak için kullandığıydı, durum böyle değildi.

Bunu okumak için zaman ayırdığınız için teşekkür ederiz. Bu konuda herhangi bir yardım veya girdi takdir edilmektedir.


kodunuzu soruya gönderebilir misiniz?
Marius

Belki biraz daha spesifik olabilir misiniz? Bütün kontrolör sınıfı ve örneklenen model çok büyüktür ve bunları soruya eklemek başlangıçtaki sorunu kavramayı kolaylaştırmaz. Eylem işlevi veya yapıcı yeterli olur mu?
rofavadeka

Yeterince adil. Sınıf adınızı, ne genişlettiğini, ne uyguladığını ve __constructmodelinizin yöntemini yazın.
Marius

İstenildiği gibi :) modelin üst kısmı. Bence Chris'in çözümü var, bunu test edecek ve sana geri döneceğim. Teşekkürler Marius.
rofavadeka

Evet. Galiba Chris aldı. :)
Marius

Yanıtlar:


109

Bu, alt sınıfınız, üst sınıfın mevcut isteğe bağlı bağımlılıklarından sonra yeni bağımlılıklar eklediğinde gerçekleşebilir.

Üst kısımdan snippet

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

Kod isteğe bağlı olanı nasıl değiştirebilir?

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

Magento 2 Nesne Yöneticisi gerekli parametreleri enjekte etmeye çalışacaktır. Dolayısıyla, yapıcının sonuna gerekli bir parametre eklerseniz bu olabilir.

İsteğe bağlı olan herhangi bir parametreyi isteğe bağlı olanların üzerine getirerek düzeltebilirsiniz.


1
Chris, çok teşekkür ederim! Sorunumu büyük zaman çözdün.
rofavadeka

Ve ikinci bir BÜYÜK TEŞEKKÜR EDERİZ. Seni seviyorum kardeşim
Yonn Trimoreau

Sağladığınız @Chris çözümü bana yardımcı oldu, teşekkürler
Mukesh

Harika açıklama!
Henry Bui

Benim sorunum, phpStorm'da auto-complete kullanırken, aynı zamanda = null bölümünü de getirememesiydi: /
OZZIE 26:17

0

Bazen bazı modüller güncellendi ve / altında yapılan referanslar henüz güncellenmedi.

Sadece bir yap bin/magento setup:di:compileve tekrar dene.

(Bir ödeme modülünü güncellerken benim için çalıştı ve / checkout yüklenmedi)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.