Question

Je joue avec Magento 2 mais je rencontre un problème que je n'arrive pas à comprendre.Le gestionnaire d'objets tente d'instancier la classe Abstract, cela donne une erreur fatale.Est-ce que quelqu'un sait ce qui pourrait causer cela ou m'orienter dans la bonne direction ?

L'erreur

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

Le problème

Mon module a un modèle qui étend le \Magento\Quote\Model\Quote.Le constructeur de ce modèle a la ligne suivante qui injecte ceci :

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

Le contrôleur qui instancie le modèle étend la \Magento\Backend\App\Action et utilise $this->_objectManager->create() pour instancier le modèle.

La chose que je ne peux pas comprendre, c'est que si j'instancie le modèle Magento, cela fonctionne, mais si j'instancie mon modèle, il essaie d'instancier cette classe abstraite en lançant l'erreur ci-dessus.Qu'est-ce qui demande au gestionnaire d'objets de faire cela et comment puis-je résoudre mon problème ?

Ma première pensée était que Magento utilise le di.xml remplacer ceci, exécuter ceci ou quelque chose, ce n'était pas le cas.

Merci d'avoir pris le temps de lire ceci.Toute aide ou contribution sur cette question est appréciée.

Était-ce utile?

La solution

Cela peut se produire si votre sous-classe a ajouté de nouvelles dépendances après les dépendances facultatives existantes de la classe parent.

Extrait du parent

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

Comment le code peut modifier ce qui est facultatif

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

Le gestionnaire d'objets Magento 2 tentera d'injecter tous les paramètres requis.Cela pourrait donc arriver si vous ajoutiez un paramètre obligatoire à la fin du constructeur.

Vous pouvez résoudre ce problème en déplaçant tout nouveau paramètre obligatoire au-dessus des paramètres facultatifs.

Autres conseils

Parfois, certains modules étaient mis à jour et les références sous /generated n'étaient pas encore mises à jour.

Faites juste un bin/magento setup:di:compile et essayez à nouveau.

(Cela a fonctionné pour moi lors de la mise à jour d'un module de paiement et /checkout ne s'est pas chargé)

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top