Как вызвать WebAPI внутренне


У меня есть API, который должен вызывать /V1/тележки/мои/предметы, нет смысла вызывать его через curl, могу ли я вызвать то же самое напрямую?

В webapi.xml говорит:

<route url="/V1/carts/mine/items" method="POST">
    <service class="Magento\Quote\Api\CartItemRepositoryInterface" method="save"/>

Di.xml говорит:

<preference for="Magento\Quote\Api\CartItemRepositoryInterface" type="Magento\Quote\Model\Quote\Item\Repository" />

Теперь в репозитории Magento\Цитата\Модель\Цитата\Элемент\написано:

Сохранение общедоступной функции (\Magento\Цитата\Api\Данные\Cartiteminterface$CartItem)

Поэтому вам нужно передать объекту реализации: \Magento\Quote\Api\Data\Cartiteminterface

Я у вас есть массив, который необходим для вышеупомянутого вызова, но, очевидно, вызов не будет работать.

И скажет

Фатальная ошибка: 'Неперехваченная ошибка типа: Аргумент 1 передан в Magento\Цитата\Модель\Цитата\Элемент\Репозиторий::сохранить() должен реализовывать интерфейс Magento\Цитата\Api\Данные\Cartiteminterface, массив задан

Какие у меня есть варианты?

Author: Curious Explorer, 2017-03-16

1 answers

Взгляните на хороший пример здесь: https://github.com/magento/magento2/blob/develop/dev/tests/integration/testsuite/Magento/Sales/_files/order_info.php#L58

Вы должны использовать Magento\Quote\Api\Data\CartItemInterfaceFactory для создания объекта CartItem, затем установить данные из имеющегося у вас массива и, наконец, передать их в Magento\Quote\Api\CartItemRepositoryInterface::save

 0
Author: Sergii Ivashchenko, 2017-03-16 15:14:26