Magento 2: berapakah parameter konstruktor array data $?

21

Jadi saya perhatikan bahwa di sebagian besar model dan blok, ini array $data = []diberikan sebagai parameter terakhir dari konstruktor .

Sebagai contoh \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
    );
}

Saya juga tahu bahwa, ketika berhadapan dengan preferensi, Anda masih harus menyimpan parameter itu di akhir daftar parameter konstruktor Anda ketika Anda menambahkan lebih banyak parameter daripada konstruktor asli.

Jadi saya punya beberapa pertanyaan tentang array ini :

  • apa itu ?
  • bagaimana cara menggunakannya ?
  • mengapa kita perlu menyimpannya di akhir daftar parameter konstruktor ketika mendeklarasikan preferensi untuk blok yang menambahkan lebih banyak parameter?
Raphael di Digital Pianism
sumber

Jawaban:

13

The $datadapat digunakan untuk data yang populate pada objek Anda karena constructor dari \Magento\Framework\DataObjectapakah ini

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

atau serupa untuk Magento\Framework\Api\AbstractSimpleObject

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

dari mana banyak kelas di Magento berasal dari.

Penggunaan yang umum dilakukan bersamaan dengan pabrik. Misalnya di Magento\Sales\Model\Order\CustomerManagementkita punya:

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

yang pada dasarnya mengisi $dataarray pada saat penciptaan.

Harus menjaga $data = []di akhir daftar parameter adalah perilaku php normal karena Anda menetapkan nilai default - array kosong.

Kristof di Fooman
sumber
16

The $data[]dapat digunakan untuk nilai-nilai terus berlalu dari di.xmlmekanisme argumen pengganti 's, ketika \Magento\Catalog\Block\Product\ListProductintantiated.

Dalam kasus Anda ini dapat diisi oleh

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

Anda bahkan dapat meneruskan objek dan format lain ke array menggunakan mekanisme di atas . Selanjutnya Anda dapat menggunakan argumen tersebut sambil memperluas fungsionalitas. Kita dapat mengatakan, itu adalah semacam va_listc.

Ini dapat digunakan ketika Anda tidak ingin memodifikasi jumlah argumen dalam konstruktor dan ingin menyuntikkan kelas lain dalam fungsionalitas Anda yang diperluas.

Codrain Technolabs Pvt Ltd
sumber
Dan bagaimana kita mendapatkan data dari $ array data itu? Bisakah Anda membagikan contoh yang ada atau apa pun.
Kingshuk Deb