Magento 2-オブジェクトマネージャは、Abstractクラスをインスタンス化しようとします。( 致命的な誤り )


37

Magento 2で遊んでいるのに問題が発生した場合、頭を抱えることができません。オブジェクトマネージャは、Abstractクラスをインスタンス化しようとしますが、これにより致命的なエラーが発生します。誰かがこれを引き起こしたり、私を正しい方向に向けたりする原因を知っていますか?

エラー

Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75

問題

私のモジュールには、を拡張するモデルがあり\Magento\Quote\Model\Quoteます。このモデルのコンストラクタには、これを挿入する次の行があります。

\Magento\Framework\Model\Resource\AbstractResource $resource = null,

モデルをインスタンス化するコントローラーは、モデルをインスタンス化\Magento\Backend\App\Actionする$this->_objectManager->create()ために拡張し、使用します。

私が頭を包み込めないのは、Magentoモデルをインスタンス化すると動作するだけですが、モデルをインスタンス化すると、この抽象クラスをインスタンス化して上記のエラーをスローすることです。オブジェクトマネージャにこれを行うよう指示するものと、問題を解決する方法を教えてください。

私が最初に考えたのは、Magentoを使用di.xmlしてこれを置き換える、これまたは何かを実行することでした。

これを読んでくれてありがとう。この問題に関するヘルプまたは入力を歓迎します。


質問にコードを投稿できますか?
マリウス

もう少し具体的に教えていただけますか?コントローラークラス全体とインスタンス化されたモデルは巨大であり、それらを質問に追加しても、最初の問題を理解するのは容易ではありません。アクション関数またはコンストラクターで十分ですか?
ロファヴァデカ

けっこうだ。クラス名、拡張するもの、実装するもの__construct、モデルのメソッドを投稿します。
マリウス

要求どおり:)モデルの上部。クリスには解決策があり、これをテストして戻ってくると思います。ありがとう、マリウス。
ロファヴァデカ

うん。クリスが得たと思う。:)
マリウス

回答:


109

これは、サブクラスが親クラスの既存のオプションの依存関係の後に新しい依存関係を追加した場合に発生する可能性があります。

親からのスニペット

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       //optional
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  //optional
    array $data = [] //optional
)}

コードがオプションを変更する方法

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       // required (even though it has a default value, because it is followed by parameters that don't have default values)
    int $x, // required
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  // optional (still optional because there are no required parameters following it)
    array $data = [] // optional
)}

Magento 2 Object Managerは、必要なパラメーターを注入しようとします。そのため、コンストラクターの最後に必須パラメーターを追加すると、これが発生する可能性があります。

これを修正するには、新しい必須パラメーターをオプションのパラメーターの上に移動します。


1
クリス、あなたは大規模なサンキューユーを獲得しました!あなたは私の問題を大いに解決しました。
ロファヴァデカ

そして、2番目の大きなありがとう。愛してるよ
ヨントリモロー16年

あなたが提供する@クリスソリューションは、おかげで私を助けた
ムケシュ

素晴らしい説明!
ヘンリーブイ

私の問題は、phpStormでオートコンプリートを使用するときに、= null部分も含めることができなかったことです:/
OZZIE

0

一部のモジュールが更新され、/ generatedの下の参照がまだ更新されていない場合がありました。

ただbin/magento setup:di:compileやり直してください。

(支払いモジュールを更新し、/ checkoutがロードされなかったときに私のために働いた)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.