Magento 2: tham số xây dựng mảng dữ liệu $ là gì?


21

Vì vậy, tôi nhận thấy rằng trong hầu hết các mô hình và khối, có cái này array $data = []được đưa ra làm tham số cuối cùng của hàm tạo .

Ví dụ \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
    );
}

Tôi cũng biết rằng, khi xử lý các tùy chọn, bạn vẫn phải giữ tham số đó ở cuối danh sách tham số hàm tạo khi bạn thêm nhiều tham số so với hàm tạo ban đầu.

Vì vậy, tôi đã có một số câu hỏi liên quan đến mảng này :

  • nó là gì ?
  • Làm thế nào để sử dụng nó ?
  • tại sao chúng ta cần giữ nó ở cuối danh sách tham số hàm tạo khi khai báo tùy chọn cho một khối có thêm tham số?

Câu trả lời:


13

$datathể được sử dụng để điền dữ liệu vào đối tượng của bạn vì hàm tạo của \Magento\Framework\DataObjectnó là

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

hoặc tương tự cho Magento\Framework\Api\AbstractSimpleObject

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

mà rất nhiều lớp học trong Magento mở rộng từ.

Một sử dụng phổ biến được kết hợp với một nhà máy. Ví dụ trong Magento\Sales\Model\Order\CustomerManagementchúng tôi có:

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

mà về cơ bản là tập hợp các $datamảng lúc tạo.

Phải giữ $data = []ở cuối danh sách các tham số là hành vi php bình thường vì bạn đang gán một giá trị mặc định - mảng trống.


16

$data[]thể được sử dụng để giữ các giá trị được truyền từ di.xmlcơ chế thay thế đối số, khi được đặt vào vị trí \Magento\Catalog\Block\Product\ListProduct.

Trong trường hợp của bạn, điều này có thể được xác định bởi

<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>

Bạn thậm chí có thể truyền đối tượng và các định dạng khác cho một mảng bằng cơ chế di trên . Hơn nữa bạn có thể sử dụng các đối số trong khi mở rộng chức năng. Chúng ta có thể nói, nó là một loại va_listtrong c.

Điều này có thể được sử dụng khi bạn không muốn sửa đổi số lượng đối số trong hàm tạo và muốn thêm các lớp khác vào các chức năng mở rộng của mình.


Và làm thế nào để chúng ta có được dữ liệu từ mảng dữ liệu $ đó? Bạn có thể chia sẻ một ví dụ hiện có hoặc bất cứ điều gì.
Kingshuk Deb
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.