Неустранимая ошибка: Не удается создать экземпляр интерфейса в Magento 2?

21

Как часть программного продукта создания пакета в Magento 2. Я получаю ошибку ниже. Даже я удалил var / cache и генерацию.

Это может быть повторяющийся вопрос, но ни один из ответов не работает для этой проблемы.

Неустранимая ошибка: не удается создать экземпляр интерфейса Magento \ Catalog \ Api \ Data \ ProductExtensionInterface в \ ObjectManager \ Factory \ Dynamic \ Developer.php в строке 73

Используется ниже код как ссылка ссылки

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

Я использую диспетчер объектов для временной / быстрой цели, преобразую диспетчер объектов в указатель конструктора.

Любой может помочь мне в этом вопросе.

Кришна иджада
источник

Ответы:

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.

user49278
источник
7

Вы не должны использовать ObjectManager.

Соберите свои зависимости через _constructor.

Если ваш интерфейс по-прежнему не будет загружен, проверьте di.xmlи подтвердите, что предпочтение доступно.

Дэвид Ламбауэр
источник
@ Дэвид Lambauer Даже я использовал конструктор я получаю не могу Instantiate интерфейс Magento \ Каталог \ Api \ Data \ ProductExtensionInterface в Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Developer.php на линии 73
Кришна ijjada
1
Вы добавили фабрику в свои заявления об использовании? использовать Magento \ Catalogue \ Api \ Data \ ProductExtensionInterfaceFactory;
Дэвид Ламбауэр
6

Я боролся с этим и затем нашел решение, которое работало для меня в документации здесь.

Обязательно добавьте ваш интерфейс в качестве предпочтения (правильно) в di.xml.

Tristanisginger
источник
2
Моя проблема заключалась в том, что я случайно поместил di.xml в папку etc / frontend, а не в корневой каталог etc, но ваш ответ привел меня к этому.
KyleBunga