与magento 2一起玩,但遇到一个问题,我不能包裹我的头。对象管理器尝试实例化抽象类,这会产生致命错误。有人知道什么可能导致这个或指向正确的方向吗?

错误

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实例化模型。

我不能包裹我的头,是如果我实例化了magento模型它只是有效,但如果我实例化我的模型它试图实例化这个抽象类抛出上面的错误。询问对象管理器要做这个以及如何解决我的问题?

我的第一个想法是magento使用$this->_objectManager->create()来替换它,执行这个或什么,这不是这种情况。

感谢您花时间读到这一点。赞赏对此问题的任何帮助或输入。

有帮助吗?

解决方案

如果您的子类在父类的现有可选依赖关系之后添加了新依赖项,则会发生这种情况。

来自父级的片段

    \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对象管理器将尝试注入任何所需的参数。因此,如果在构造函数末尾添加了所需参数,可能会发生这种情况。

您可以通过在可选的任何新要求的参数上移动任何新的所需参数来解决这个问题。

其他提示

有时会更新一些模块,并且尚未更新/生成的引用。

只是做一个bin/magento setup:di:compile,然后重试。

(在更新付款模块和/ checkout未加载时为我工作)

许可以下: CC-BY-SA归因
scroll top