Error fatal: ¿No se puede crear una instancia de la interfaz en Magento 2?

21

Como parte de la creación de productos de paquete mediante programación en Magento 2. Me aparece el siguiente error. Incluso eliminé var / cache y generación.

Esta puede ser una pregunta duplicada, pero ninguna de las respuestas funciona para este problema.

Error grave: no se puede crear una instancia de la interfaz Magento \ Catalog \ Api \ Data \ ProductExtensionInterface en \ ObjectManager \ Factory \ Dynamic \ Developer.php en la línea 73

Se usa debajo del código como referencia del enlace

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

Estoy usando el administrador de objetos para un propósito temporal / rápido, convertirá el administrador de objetos en un mandato del constructor.

Cualquiera puede ayudarme en este tema.

Krishna ijjada
fuente

Respuestas:

21

Creo que no ha mencionado la preferencia en su di.xml. También enfrenté el mismo problema cuando estaba creando un módulo de archivo xml de configuración personalizado.

Recibí el problema cuando llamé a este código:

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

A continuación se muestra el código de ejemplo que he agregado en mi di.xml , puede ser que pueda ayudarlo a obtener referencia:

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

Aquí he implementado la interfaz en Training\Test\Model\Configclase y mi getMyNodeInfo()método está definido en ese modelo.

Entonces, según la preferencia definida en di.xml, el código ->get('Training\Test\Model\Config\ConfigInterface');creará un objeto de tipo Training\Test\Model\Config.

usuario49278
fuente
7

No deberías usar el ObjectManager.

Recoge tus dependencias a través de _constructor.

En caso de que su interfaz aún no se cargue, verifique di.xmly valide que haya una preferencia disponible.

David Lambauer
fuente
@ David Lambauer Incluso utilicé el constructor que estoy obteniendo No se puede crear una instancia de la interfaz Magento \ Catalog \ Api \ Data \ ProductExtensionInterface en magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.php en la línea 73
Krishna ijjada
1
¿Agregó la fábrica a sus declaraciones de uso? use Magento \ Catalog \ Api \ Data \ ProductExtensionInterfaceFactory;
David Lambauer
6

Luché con esto y luego encontré una solución que funcionó para mí en la documentación aquí.

Asegúrese de agregar su interfaz como preferencia (correctamente) en el di.xml.

Tristanisginger
fuente
2
Mi problema fue que coloqué el di.xml en la carpeta etc / frontend en lugar de la raíz etc por accidente, pero su respuesta me llevó a encontrar eso.
KyleBunga