Domanda

Gioca in giro con Magento 2 Ma correre in un problema Non posso avvolgermi la testa. Il gestore degli oggetti tenta di istanziare la classe astratta, questo fornisce un errore irreversibile. Qualcuno sa cosa potrebbe causare questo o indicarmi nella giusta direzione?

L'errore

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

Il problema

Il mio modulo ha un modello che estende il \Magento\Quote\Model\Quote. Il costruttore di questo modello ha la seguente riga iniettando questo:

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

Il controller che è istanziante del modello estende il \Magento\Backend\App\Action e utilizza $this->_objectManager->create() per istanziare il modello.

La cosa che non posso avvolgere la testa in giro è se istanziare il modello magento funziona solo ma se istanziare il mio modello cerca di istanziare questa classe astratta che lancia l'errore sopra. Cosa dice al manager degli oggetti di fare questo e come posso risolvere il mio problema?

Il mio primo pensiero è stato magento usa il di.xml per sostituire questo, eseguire questo o qualcosa del genere, non è stato il caso.

Grazie per aver preso il tempo per leggere questo. Qualsiasi aiuto o input su questo problema è apprezzato.

È stato utile?

Soluzione

Questo può accadere se la tua sotto-classe ha aggiunto nuove dipendenze dopo le dipendenze opzionali esistenti della classe genitore.

Snippet dal genitore

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

In che modo il codice potrebbe modificare ciò che è opzionale

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

Il Gestore dell'oggetto Magento 2 cercherà di iniettare i parametri richiesti.Quindi questo potrebbe accadere se hai aggiunto un parametro richiesto alla fine del costruttore.

È possibile risolvere questo problema spostando qualsiasi nuovo parametro richiesto sopra quelli opzionali.

Altri suggerimenti

A volte alcuni moduli sono stati aggiornati e i riferimenti sotto / generati non sono ancora stati aggiornati.

Basta fare un bin/magento setup:di:compile e riprovare.

(Ha funzionato per me quando si aggiorna un modulo di pagamento e / checkout non ha caricato)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top