Magento 2: พารามิเตอร์ตัวสร้าง $ data array คืออะไร?


21

ดังนั้นผมสังเกตเห็นว่าในรูปแบบมากที่สุดและบล็อกมีนี้array $data = []ให้เป็นพารามิเตอร์สุดท้ายของการสร้าง

ตัวอย่างเช่น \Magento\Catalog\Block\Product\ListProduct

public function __construct(
    \Magento\Catalog\Block\Product\Context $context,
    \Magento\Framework\Data\Helper\PostHelper $postDataHelper,
    \Magento\Catalog\Model\Layer\Resolver $layerResolver,
    CategoryRepositoryInterface $categoryRepository,
    \Magento\Framework\Url\Helper\Data $urlHelper,
    array $data = []
) {
    $this->_catalogLayer = $layerResolver->get();
    $this->_postDataHelper = $postDataHelper;
    $this->categoryRepository = $categoryRepository;
    $this->urlHelper = $urlHelper;
    parent::__construct(
        $context,
        $data
    );
}

ฉันยังรู้ว่าเมื่อต้องรับมือกับการกำหนดลักษณะคุณยังต้องเก็บพารามิเตอร์นั้นไว้ท้ายรายการพารามิเตอร์คอนสตรัคเตอร์ของคุณเมื่อคุณเพิ่มพารามิเตอร์มากกว่าคอนสตรัคเตอร์ดั้งเดิม

ดังนั้นฉันมีคำถามหลายข้อเกี่ยวกับอาร์เรย์นี้ :

  • มันคืออะไร ?
  • วิธีใช้งาน
  • ทำไมเราต้องเก็บไว้ที่ท้ายรายการพารามิเตอร์คอนสตรัคเตอร์เมื่อประกาศการตั้งค่าสำหรับบล็อกที่เพิ่มพารามิเตอร์เพิ่มเติม

คำตอบ:


13

$dataสามารถใช้ในการเติมข้อมูลบนวัตถุของคุณตั้งแต่สร้างของ\Magento\Framework\DataObjectนี้

public function __construct(array $data = [])
{
    $this->_data = $data;
}

หรือคล้ายกันสำหรับ Magento\Framework\Api\AbstractSimpleObject

/**
 * Initialize internal storage
 *
 * @param array $data
 */
public function __construct(array $data = [])
{
    $this->_data = $data;
}

ซึ่งเรียนจำนวนมากใน Magento ขยายออกไป

การใช้งานทั่วไปนั้นใช้ร่วมกับโรงงาน ตัวอย่างเช่นใน Magento\Sales\Model\Order\CustomerManagementเรามี:

$this->addressFactory->create(['data' => $addressData]);

ซึ่งจะเติม$dataข้อมูลอาร์เรย์ของการสร้าง

ต้องเก็บไว้$data = []ในตอนท้ายของรายการของพารามิเตอร์เป็นพฤติกรรม php ปกติเนื่องจากคุณได้รับการกำหนดค่าเริ่มต้น - อาร์เรย์ที่ว่างเปล่า


16

$data[]สามารถนำมาใช้เป็นค่าการระงับการส่งผ่านจากdi.xmlกลไกการขัดแย้งทดแทน 's เมื่อ\Magento\Catalog\Block\Product\ListProductintantiated

ในกรณีของคุณอาจมีการเติมโดย

<type name="\Magento\Catalog\Block\Product\ListProduct">
         <arguments>
             <argument name="data" xsi:type="array">
                 <item name="0" xsi:type="string">anystring</item>
                 <item name="1" xsi:type="string">xyz</item>
                <item name="2" xsi:type="string">abs</item>
            </argument>
         </arguments>
     </type>

คุณสามารถส่งวัตถุและรูปแบบอื่นไปยังอาร์เรย์โดยใช้กลไกdiข้างต้น นอกจากนี้คุณสามารถใช้อาร์กิวเมนต์เหล่านั้นในขณะที่ขยายฟังก์ชันการทำงาน เราสามารถพูดได้ว่ามันเป็นชนิดของva_listc

สิ่งนี้สามารถใช้เมื่อคุณไม่ต้องการแก้ไขจำนวนอาร์กิวเมนต์ในตัวสร้างและต้องการฉีดคลาสอื่น ๆ ในฟังก์ชันการทำงานแบบขยายของคุณ


และเราจะได้ข้อมูลจาก $ data array อย่างไร คุณสามารถแบ่งปันตัวอย่างที่มีอยู่หรืออะไรก็ได้
Kingshuk Deb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.