Magento 2: Как функция доставки остальных API называется On Checkout?

9

Когда вы нажимаете «Отправить здесь» на странице оплаты, он вызывает

Magento / отдых / по умолчанию / V1 / тележки / мин / оценка Шиппинг-метода-по-адрес-идентификатор

Тогда это идет ниже файлов JS

Magento \ поставщика \ Magento \ модуль кассового \ вид \ внешний интерфейс \ Web \ JS \ модели \ судоходством скорости процессора \ клиент-address.js

Magento \ поставщика \ Magento \ модуль кассового \ вид \ Frontend \ Web \ JS \ модель \ ресурсные-url-manager.js

getUrlForEstimationShippingMethodsByAddressId: function(quote) {
    var params = (this.getCheckoutMethod() == 'guest') ? {quoteId: quote.getQuoteId()} : {};
    var urls = {
        'default': '/carts/mine/estimate-shipping-methods-by-address-id'
    };
    return this.getUrl(urls, params);
}

Magento \ поставщика \ Magento \ модуль кавычка \ Model \ ShippingMethodManagement.php

 public function estimateByAddressId($cartId, $addressId)
    {
      echo 1;exit;
    }

Как estimateByAddressIdназывается функция выше ?

Анкит Шах
источник

Ответы:

6

Как вы указали, когда вы нажимаете «Отправить здесь», HTTP-запрос POST отправляется в "/V1/carts/mine/estimate-shipping-methods-by-address-id"REST API (из кавычек модуля). Если вы посмотрите на него, module-quote/etc/webapi.xmlвы найдете URL:

<route url="/V1/carts/mine/estimate-shipping-methods-by-address-id" method="POST">
  <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="estimateByAddressId"/>
  <resources>
    <resource ref="self" />
  </resources>
  <data>
    <parameter name="cartId" force="true">%cart_id%</parameter>
  </data>
</route>

Вы можете заметить, что под <route>элементом есть <service>элемент с class="Magento\Quote\Api\GuestShipmentEstimationInterface"и method="estimateByExtendedAddress". Теперь очевидно, что estimateByAddressIdметод не может быть создан из интерфейса.

Здесь появляется сценарий зависимости от magento 2. Посмотрите на module-quote/etc/di.xmlфайл, который отображает Magento\Quote\Api\ShippingMethodManagementInterfaceзависимость interface ( ) с предпочтительным классом реализации ( Magento\Quote\Model\ShippingMethodManagement).

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Quote\Api\ShippingMethodManagementInterface" type="Magento\Quote\Model\ShippingMethodManagement" />
    ...................
</config>

Вот как estimateByAddressIdметод вызывается.

Полезные ссылки:

Веб-API Magento 2:
http://devdocs.magento.com/guides/v2.0/get-started/bk-get-started-api.html
http://devdocs.magento.com/guides/v2.0/ расширение-DEV-гид / сервис-контракты / услуги к веб-service.html

Инъекция зависимостей в Magento 2:
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
http://magento-quickies.alanstorm.com/post/68129858943/magento- 2-инъекционные-интерфейсы

Алекс Константинеску
источник