Việc sử dụng nút ánh xạ ánh xạ trong các tệp di động trong Magento 2 là gì?


8

Tôi đang sử dụng Magento 2.2.5

có một cái nhìn vào tập tin

nhà cung cấp \ magento \ mô-đun bán hàng \ etc \ di.xml

<type name="Magento\Payment\Model\Checks\SpecificationFactory">
    <arguments>
        <argument name="mapping" xsi:type="array">
            <item name="country" xsi:type="object">Magento\Payment\Model\Checks\CanUseForCountry</item>
            <item name="currency" xsi:type="object">Magento\Payment\Model\Checks\CanUseForCurrency</item>
            <item name="checkout" xsi:type="object">Magento\Payment\Model\Checks\CanUseCheckout</item>
            <item name="internal" xsi:type="object">Magento\Payment\Model\Checks\CanUseInternal</item>
            <item name="total" xsi:type="object">Magento\Payment\Model\Checks\TotalMinMax</item>
            <item name="zero_total" xsi:type="object">Magento\Payment\Model\Checks\ZeroTotal</item>
        </argument>
    </arguments>
</type>

có một nút có tên " ánh xạ ". Có ai có bất kỳ ý tưởng về việc sử dụng nó?

Tôi đã đọc câu hỏi Magento 2 - Trường hợp nào tôi sử dụng di.xml và Cách sử dụng di.xml cho mô-đun? và bài viết của Alan Storm "Thay thế đối số quản lý đối tượng Magento 2"

Cảm ơn

Câu trả lời:


2

Khi bạn kiểm tra Magento\Payment\Model\Checks\SpecificationFactorycủaconstrut

public function __construct(\Magento\Payment\Model\Checks\CompositeFactory $compositeFactory, array $mapping)
    {
        $this->compositeFactory = $compositeFactory;
        $this->mapping = $mapping;
    }

Đối số thứ hai array $mappingtrong mảng bạn sẽ nhận được tất cả đối số mà bạn đã xác định trongdi.xml

BIÊN TẬP

từ construct $this->mappingbạn sẽ tìm thấy tất cả các đối tượng trong mảng mà bạn đã xác định di.xml.

Ví dụ: Nếu bạn đặt <argument name="mappingtest" xsi:type="array">thì bạn cần xác định construct

 public function __construct(
\Magento\Payment\Model\Checks\CompositeFactory $compositeFactory, array $mappingytest
) {
    $this->compositeFactory = $compositeFactory;
    $this->mapping = $mapping;
}

Đây $mappingytest


Tôi đã thấy điều này, nhưng không thể hiểu logic của tập tin này. Bạn muốn nói nếu chúng ta sử dụng mappingnút, Nó sẽ thêm một tham số mảng trong lớp loại tương ứng ở đây 'Magento \ Payment \ Model \ Checks \ Đặc điểm kỹ thuật'.
Knight017

Điều này có liên quan đến đối số cuối cùng mà chúng ta vượt qua trong hàm tạo của tất cả mô hình không, mảng $ data = [] ?
Knight017

Vâng, nó có liên quan đến tham số cuối cùng như được đề cập trong câu trả lời của tôimapping
Keyur Shah

Bạn vẫn có câu hỏi nào? @ Knight017 :)
Keyur Shah

Không, thực sự tôi đã kết luận câu trả lời bằng cách chỉnh sửa câu trả lời của bạn. Nhưng bằng cách nào đó nó không hiển thị bây giờ.
Knight017

2

Trình quản lý đối tượng tiêm lớp triển khai Magento \ Core \ Model \ Url bất cứ nơi nào có yêu cầu đối với Magento \ Core \ Model \ UrlInterface trong phạm vi toàn cầu.

Nhiều xác nhận cho các mô-đun khác nhau với nộp.

<argument name="mapping" xsi:type="array">
                <item name="country" xsi:type="object">Magento\Payment\Model\Checks\CanUseForCountry</item>
                <item name="currency" xsi:type="object">Magento\Payment\Model\Checks\CanUseForCurrency</item>
                <item name="checkout" xsi:type="object">Magento\Payment\Model\Checks\CanUseCheckout</item>
                <item name="internal" xsi:type="object">Magento\Payment\Model\Checks\CanUseInternal</item>
                <item name="total" xsi:type="object">Magento\Payment\Model\Checks\TotalMinMax</item>
                <item name="zero_total" xsi:type="object">Magento\Payment\Model\Checks\ZeroTotal</item>
            </argument>

Bây giờ kiểm tra SpecificationFactory tập tin cho logic kinh doanh.

nhà cung cấp / magento / mô-đun thanh toán / Mô hình / Séc / Đặc tảFactory.php

class SpecificationFactory
{
    /**
     * Composite Factory
     *
     * @var \Magento\Payment\Model\Checks\CompositeFactory
     */
    protected $compositeFactory;

    /**
     * @var array
     */
    protected $mapping;

    /**
     * Construct
     *
     * @param \Magento\Payment\Model\Checks\CompositeFactory $compositeFactory
     * @param array $mapping
     */
    public function __construct(\Magento\Payment\Model\Checks\CompositeFactory $compositeFactory, array $mapping)
    {
        $this->compositeFactory = $compositeFactory;
        $this->mapping = $mapping;
    }

    /**
     * Creates new instances of payment method models
     *
     * @param array $data
     * @return Composite
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function create($data)
    {
        $specifications = array_intersect_key($this->mapping, array_flip((array)$data));
        return $this->compositeFactory->create(['list' => $specifications]);
    }
}

Nó xác nhận các mô-đun dữ liệu ánh xạ khôn ngoan.

$specifications = array_intersect_key($this->mapping, array_flip((array)$data));

0

Phần kết luận

Cuộc trò chuyện với @Keyur Shah và đề xuất của @Jignesh Khunt kết luận rằng bạn có thể thêm cấu hình vào di.xmlvà có thể truy cập trong lớp loại tại đây Magento\Payment\Model\Checks\SpecificationFactory. Trong mảng param cuối cùng $mappingtrong hàm tạo tập tin bên dưới.

nhà cung cấp \ magento \ mô-đun thanh toán \ Mô hình \ Kiểm tra \ Đặc điểm kỹ thuật.php

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Payment\Model\Checks;

/**
 * Creates complex specification.
 *
 * Use this class to register predefined list of specifications that should be added to any complex specification.
 *
 * @api
 * @since 100.0.2
 */
class SpecificationFactory
{
    /**
     * Composite Factory
     *
     * @var \Magento\Payment\Model\Checks\CompositeFactory
     */
    protected $compositeFactory;

    /**
     * @var array
     */
    protected $mapping;

    /**
     * Construct
     *
     * @param \Magento\Payment\Model\Checks\CompositeFactory $compositeFactory
     * @param array $mapping
     */
    public function __construct(\Magento\Payment\Model\Checks\CompositeFactory $compositeFactory, array $mapping)
    {
        $this->compositeFactory = $compositeFactory;
        $this->mapping = $mapping;
    }

    /**
     * Creates new instances of payment method models
     *
     * @param array $data
     * @return Composite
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function create($data)
    {
        $specifications = array_intersect_key($this->mapping, array_flip((array)$data));
        return $this->compositeFactory->create(['list' => $specifications]);
    }
}

Nút đối số (ở đây " $ maps ") phải là biến thành viên của lớp loại ( Magento\Payment\Model\Checks\SpecificationFactory).

Sau đó, dữ liệu bạn truyền vào di.xmlsẽ có thể truy cập và có thể sử dụng được trong lớp nhà máy của bạn và bạn có thể tùy chỉnh logic. Tôi đã sử dụng để khởi tạo lớp động theo dữ liệu có sẵn trong mảng ánh xạ $ (không cần viết lại hoặc plugin / prefrence) bằng tính năng này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.