Erro fatal: Não é possível instanciar a interface no Magento 2?

21

Como parte da criação de produtos de pacote programaticamente no Magento 2. Estou recebendo erro abaixo. Mesmo eu removi var / cache e geração.

Essa pode ser uma pergunta duplicada, mas nenhuma resposta está funcionando para esse problema.

Erro fatal: Não é possível instanciar a interface Magento \ Catalog \ Api \ Data \ ProductExtensionInterface em \ ObjectManager \ Factory \ Dynamic \ Developer.php na linha 73

Usado abaixo do código como referência do link

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

Estou usando o gerenciador de objetos para fins temporários / rápidos, converterá o gerenciador de objetos em injunção de construtor.

Qualquer um pode me ajudar nessa questão.

Krishna ijjada
fonte

Respostas:

20

Eu acho que você não mencionou a preferência no seu di.xml. Também enfrentei o mesmo problema ao criar o módulo de arquivo xml de configuração personalizado.

Recebi o problema quando chamei esse código:

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

Abaixo está o código de exemplo que eu adicionei no meu di.xml , pode ser que ajude você a obter referência:

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

Aqui eu implementei a interface na Training\Test\Model\Configclasse e meu getMyNodeInfo()método é definido nesse modelo.

Assim, com base na preferência definida no di.xml o código ->get('Training\Test\Model\Config\ConfigInterface');irá criar um objeto do tipo Training\Test\Model\Config.

user49278
fonte
7

Você não deve usar o ObjectManager.

Colete suas dependências via _constructor.

Caso sua interface ainda não seja carregada, verifique di.xmle confirme se uma preferência está disponível.

David Lambauer
fonte
@ David Lambauer Mesmo eu usei construtor estou recebendo não pode instanciar interface de Magento \ Catalog \ Api \ Data \ ProductExtensionInterface em magento \ framework \ ObjectManager \ Fábrica \ Dinâmico \ Developer.php na linha 73
Krishna ijjada
11
Você adicionou a fábrica às suas instruções de uso? use Magento \ Catalog \ Api \ Data \ ProductExtensionInterfaceFactory;
David Lambauer 13/10/19
6

Lutei com isso e encontrei uma solução que funcionou para mim na documentação aqui.

Certifique-se de adicionar sua interface como uma preferência (corretamente) no di.xml.

Tristanisginger
fonte
2
Meu problema foi que coloquei o di.xml na pasta etc / frontend em vez da raiz etc por acidente, mas sua resposta me levou a encontrá-lo.
KyleBunga