Magento 2: $ data array constructor parametresi nedir?


21

Ben en çok model ve bloklarda fark Yani, orada bu array $data = []yapıcı son parametre olarak verilen .

Örneğin \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
    );
}

Ayrıca, tercihlerle başa çıkarken, orijinal yapıcıdan daha fazla parametre eklediğinizde bu parametreyi yapıcı parametreleri listenizin sonunda tutmanız gerektiğini de biliyorum .

Bu diziyle ilgili birkaç sorum var :

  • bu ne ?
  • bu nasıl kullanılır ?
  • daha fazla parametre ekleyen bir blok için tercihler bildirilirken neden bunu yapıcı parametreleri listesinin sonunda tutmamız gerekiyor?

Yanıtlar:


13

$dataYapıcısı beri nesne üzerinde doldurmak verilere kullanılabilir \Magento\Framework\DataObjectşudur

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

veya benzeri Magento\Framework\Api\AbstractSimpleObject

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

Magento'da bir çok sınıfın uzandığı bu.

Yaygın bir kullanım bir fabrika ile birliktedir. Örneğin Magento\Sales\Model\Order\CustomerManagementbiz var:

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

hangi esas olarak $datadiziyi yaratılışta doldurur .

$data = []Parametreler listesinin sonunda tutulmak zorunda olmanız normal php davranışıdır, çünkü varsayılan bir değer atarsınız - boş dizi.


16

Değerlendiğinde $data[], di.xmlargüman değiştirme mekanizmasından geçen değerleri tutmak için kullanılabilir \Magento\Catalog\Block\Product\ListProduct.

Senin durumunda bu tarafından doldurulabilir

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

Yukarıdaki di mekanizmasını kullanarak bir diziye nesne ve diğer biçimleri bile geçirebilirsiniz . Ayrıca, işlevselliği genişletirken bu argümanları kullanabilirsiniz. Bir tür va_listc cinsinden olduğunu söyleyebiliriz .

Bir yapıcıdaki bağımsız değişken sayısını değiştirmek istemediğinizde ve genişletilmiş işlevlerinizde diğer sınıfları enjekte etmek istediğinizde bu kullanılabilir.


Ve bu $ data dizisindeki verileri nasıl alacağız? Mevcut bir örneği veya herhangi bir şeyi paylaşabilir misiniz.
Kingshuk Deb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.