У меня есть модуль, который переопределяет класс ShippingMethodConverter. Я сделал конфигурацию в моем di.xml так:Magento 2 - 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.
благодарим за ответ. Знайте, что это отлично работает для ShippingMethodConverter. У меня есть еще один вопрос об интерфейсе, который я хочу переопределить. Причина: Я получил следующую ошибку: Не удалось создать интерфейс MyNameSpace \ MyModule \ Quote \ Api \ Data \ ShippingMethodInterface. Поскольку я правильно понял это, я могу назначить класс, а не интерфейс для виртуального типа. Или как это работает с интерфейсами? Заранее спасибо –
@StephanHofmann Я боюсь, что это слишком неопределенно для меня, чтобы ответить со 100% уверенностью, но похоже, что ваша конфигурация пытается создать интерфейс. Вам понадобится создать '' для вашего интерфейса, который сообщил Magento, какой конкретный класс он должен создать, когда он встречает «MyNameSpace \ MyModule \ Quote \ Api \ Data \ ShippingMethodInterface' –