致命的なエラー: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);

私は一時的/迅速な目的でオブジェクトマネージャーを使用しています。オブジェクトマネージャーをコンストラクター差止命令に変換します。

誰でもこの問題に関して私を助けることができます。

回答:


20

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');はtypeのオブジェクトを作成しますTraining\Test\Model\Config


7

を使用しないでくださいObjectManager

経由で依存関係を収集します_constructor

インターフェースがまだロードされない場合は、をチェックdi.xmlして、設定が利用可能であることを確認してください。


デビッドLambauer @でも、私は私がいないインスタンス化MagentoのでMagentoの\カタログ\アピ\データ\ ProductExtensionInterface \ライン73上の枠組み\のObjectManager \工場\ダイナミック\ Developer.php CANインタフェースを取得していますコンストラクタを使用
クリシュナijjada

1
ファクトリーをuseステートメントに追加しましたか?Magento \ Catalog \ Api \ Data \ ProductExtensionInterfaceFactoryを使用します。
デビッドランバウアー

6

私はこれに苦労した後、ここでのドキュメントで私のために働いた解決策を見つけました。

di.xmlにインターフェイスを(正しく)設定として追加してください。


2
私の問題は、誤ってetc.rootの代わりにetc / frontendフォルダーにdi.xmlを置いたということでしたが、あなたの答えが私を見つけました。
カイルブンガ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.