我有一个覆盖ShippingMethodConverter类的模块。我在di.xml中进行了配置,如下所示:
<preference for="Magento\Quote\Model\Cart\ShippingMethodConverter"
type="MyNameSpace\MyModule\Quote\Model\Cart\ShippingMethodConverter"/>
<virtualType name="mynamespace_mymodule_quote_mode_cart_shippingmethodconverter" type="\MyNameSpace\MyModule\Quote\Model\Cart\ShippingMethodConverter">
<arguments>
<argument name="shippingMethodConverter" xsi:type="object">\Magento\Quote\Model\Cart\ShippingMethodConverter</argument>
</arguments>
</virtualType>
不幸的是我收到了以下错误:
1 exception(s):
Exception #0 (Exception): Recoverable Error: Argument 2 passed to
Magento\Quote\Model\ShippingMethodManagement::__construct()
must be an instance of Magento\Quote\Model\Cart\ShippingMethodConverter,
instance of MyNameSpace\MyModule\Quote\Model\Cart\ShippingMethodConverter given,
called in /path_to_magento/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php
on line 93 and defined in
/path_to_magento/vendor/magento/module-quote/Model/ShippingMethodManagement.php on line 62
我的班级开头是这样的:
namespace MyNameSpace\MyModule\Quote\Model\Cart;
/**
* Quote shipping method data.
*
*/
class ShippingMethodConverter
{
..
正如我正确理解virtualType,我想说我的类应该像给定的参数一样处理,以保证magento核心中没有类型解析错误。
答案 0 :(得分:1)
您看到的错误基于此
<preference for="Magento\Quote\Model\Cart\ShippingMethodConverter"
type="MyNameSpace\MyModule\Quote\Model\Cart\ShippingMethodConverter"/>
使用此配置,您可以告诉Magento的自动构造函数依赖注入系统,只要它在构造函数中看到Magento\Quote\Model\Cart\ShippingMethodConverter
,它就应该实例化MyNameSpace\MyModule\Quote\Model\Cart\ShippingMethodConverter
对象而不是Magento\Quote\Model\Cart\ShippingMethodConverter
对象{1}}对象。
Magento正确地执行了此操作,但由于您的对象在构造函数中未通过类型提示检查,因此PHP出现错误。您的类需要扩展Magento\Quote\Model\Cart\ShippingMethodConverter
类(或者如果Magento\Quote\Model\Cart\ShippingMethodConverter
是接口,则实现它)