致命错误:无法在Magento 2中实例化接口?


21

作为在Magento 2中以编程方式创建捆绑产品的一部分,我遇到了错误。甚至我删除了var / cache和generation。

这可能是一个重复的问题,但没有一个答案可解决此问题。

致命错误:无法在第73行的\ ObjectManager \ Factory \ Dynamic \ Developer.php中实例化接口Magento \ Catalog \ Api \ Data \ ProductExtensionInterface

下面的代码用作链接的参考

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

我将对象管理器用于临时/快速用途,会将对象管理器转换为构造函数指令。

任何人都可以帮助我解决这个问题。

Answers:


21

我认为您在di.xml中没有提到首选项。在创建自定义配置xml文件模块时,我也遇到了相同的问题。

调用此代码时遇到了问题:

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

以下是我在di.xml中添加的示例代码,可能会帮助您获得参考:

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

在这里,我已经在Training\Test\Model\Config类中实现了接口,并且getMyNodeInfo()在该模型中定义了我的方法。

因此,基于di.xml中定义的首选项,代码 ->get('Training\Test\Model\Config\ConfigInterface');将创建类型的对象Training\Test\Model\Config


7

您不应该使用ObjectManager

通过收集您的依赖项_constructor

万一您的界面仍然无法加载,请检查您的界面di.xml并验证其是否可用。


@ David Lambauer即使我使用构造函数,我也无法在第73行上的magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.php中实例化接口Magento \ Catalog \ Api \ Data \ ProductExtensionInterface接口
Krishna ijjada

1
您是否将工厂添加到使用声明中?使用Magento \ Catalog \ Api \ Data \ ProductExtensionInterfaceFactory;
David Lambauer '16

6

我为此苦苦挣扎,然后在这里的文档中找到了对我有用的解决方案。

确保在di.xml中(正确)添加您的界面作为首选项。


2
我的问题是我偶然将di.xml放在了etc / frontend文件夹中而不是etc根目录中,但是您的回答使我找到了它。
KyleBunga
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.