對 window.checkoutConfig 進行擴展

javascript對象window.checkoutConfig幾乎包含checkout頁面顯示的全部動態數據,例如order summary。因此當須要對checkout進行改造時不可避免須要對window.checkoutConfig進行數據擴展。javascript

若是追溯window.checkoutConfig數據來源,會依次找到如下代碼:php

// vendor/magento/module-checkout/view/frontend/templates/onepage.phtml
window.checkoutConfig = <?php /* @escapeNotVerified */ echo \Zend_Json::encode($block->getCheckoutConfig()); ?>;
// vendor/magento/module-checkout/Block/Onepage.php
public function __construct(
    \Magento\Checkout\Model\CompositeConfigProvider $configProvider
) {
    $this->configProvider = $configProvider;
    // ...
}

public function getCheckoutConfig()
{
    return $this->configProvider->getConfig();
}
// vendor/magento/module-checkout/Model/CompositeConfigProvider.php
public function __construct(
    array $configProviders
) {
    $this->configProviders = $configProviders;
}

public function getConfig()
{
    $config = [];
    foreach ($this->configProviders as $configProvider) {
        $config = array_merge_recursive($config, $configProvider->getConfig());
    }
    return $config;
}

可見它來源於configProviders,而configProviders在構造器上倒是array類型。構造器都是依賴注入的入口,而array則意味着它能夠由di.xml進行無限擴展。而window.checkoutConfig有數據,說明了它一定有一個默認的configProvider提供數據,搜索全部di.xml,把含有 Magento\Checkout\Model\CompositeConfigProvider的結果列出,能找到如下代碼:html

<!-- vendor/magento/module-checkout/etc/frontend/di.xml -->
<type name="Magento\Checkout\Model\CompositeConfigProvider">
    <arguments>
        <argument name="configProviders" xsi:type="array">
            <item name="checkout_default_config_provider" xsi:type="object">Magento\Checkout\Model\DefaultConfigProvider</item>
        </argument>
    </arguments>
</type>

默認的ConfigProvider已找到,能夠修改默認的ConfigProvider或者添加新的ConfigProvider來追加數據。java

相關文章
相關標籤/搜索