Erreur fatale: impossible d'instancier l'interface dans Magento 2?

21

Dans le cadre de la création d'un produit groupé par programme dans Magento 2. Je reçois une erreur ci-dessous. Même j'ai supprimé var / cache et la génération.

Il peut s'agir d'une question en double, mais aucune réponse ne fonctionne pour ce problème.

Erreur fatale: impossible d'instancier l'interface Magento \ Catalog \ Api \ Data \ ProductExtensionInterface dans \ ObjectManager \ Factory \ Dynamic \ Developer.php sur la ligne 73

Utilisé sous le code comme référence de lien

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

J'utilise le gestionnaire d'objets à des fins temporaires / rapides, convertira le gestionnaire d'objets en injonction du constructeur.

N'importe qui peut m'aider sur cette question.

Krishna ijjada
la source

Réponses:

21

Je pense que vous n'avez pas mentionné la préférence dans votre di.xml. J'ai également rencontré le même problème lorsque je créais un module de fichier xml de configuration personnalisée.

J'ai eu le problème lorsque j'ai appelé ce code:

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

Voici l'exemple de code que j'ai ajouté dans mon di.xml , peut-être que cela peut vous aider à obtenir une référence:

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

Ici, j'ai implémenté l'interface en Training\Test\Model\Configclasse et ma getMyNodeInfo()méthode est définie dans ce modèle.

Ainsi, en fonction de la préférence définie dans di.xml, le code ->get('Training\Test\Model\Config\ConfigInterface');créera un objet de type Training\Test\Model\Config.

user49278
la source
7

Vous ne devez pas utiliser le ObjectManager.

Collectez vos dépendances via _constructor.

Dans le cas où votre interface ne sera toujours pas chargée, vérifiez votre di.xmlet validez qu'une préférence est disponible.

David Lambauer
la source
@ David Lambauer Même j'ai utilisé le constructeur que j'obtiens Impossible d'instancier l'interface Magento \ Catalog \ Api \ Data \ ProductExtensionInterface dans magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.php sur la ligne 73
Krishna ijjada
1
Avez-vous ajouté l'usine à vos déclarations d'utilisation? utilisez Magento \ Catalog \ Api \ Data \ ProductExtensionInterfaceFactory;
David Lambauer
6

J'ai lutté avec cela et j'ai trouvé une solution qui a fonctionné pour moi dans la documentation ici.

Assurez-vous d'ajouter votre interface en tant que préférence (correctement) dans le di.xml.

Tristanisginger
la source
2
Mon problème était que j'ai placé le di.xml dans le dossier etc / frontend au lieu de la racine etc par accident, mais votre réponse m'a amené à le trouver.
KyleBunga