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来代替它,执行或执行某种操作,事实并非如此。

感谢您抽时间阅读。感谢您提供有关此问题的任何帮助或意见。


您可以在问题中发布代码吗?
马吕斯

您能否更具体一点?整个控制器类和实例化模型非常庞大,将它们添加到问题中并不会使理解初始问题变得更加容易。动作函数或构造函数是否足够?
rofavadeka

很公平。发布您的类名称,它的扩展名,其实现的内容以及__construct模型的方法。
马吕斯

根据要求:)模型的顶部。我认为Chris有解决方案,可以对此进行测试并与您联系。谢谢马吕斯。
rofavadeka

是的 我认为克里斯知道了。:)
Marius

Answers:


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

您可以通过将任何新的必需参数上移到可选参数之上来解决此问题。


1
克里斯,您赢得了巨大的感谢!你大时间解决了我的问题。
rofavadeka

再次感谢您。我爱你,兄弟
Yonn Trimoreau

您提供的@Chris解决方案对我有帮助,谢谢
Mukesh

很好的解释!
亨利·布(Henry Bui)

我的问题是,在phpStorm中使用自动完成功能时,它也无法带来= null部分:/
OZZIE

0

有时,某些模块已更新,/ generated下的引用尚未更新。

请执行一次,bin/magento setup:di:compile然后重试。

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

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.