Magento 2: qual è il parametro del costruttore $ data array?


21

Quindi ho notato che nella maggior parte dei modelli e blocchi, questo è array $data = []dato come l'ultimo parametro del costruttore .

Per esempio \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
    );
}

So anche che, quando si ha a che fare con le preferenze, è necessario mantenere quel parametro alla fine dell'elenco dei parametri del costruttore quando si aggiungono più parametri rispetto al costruttore originale.

Quindi ho diverse domande su questo array :

  • che cos'è ?
  • come usarlo ?
  • perché dobbiamo tenerlo alla fine dell'elenco dei parametri del costruttore quando si dichiarano le preferenze per un blocco che aggiunge più parametri?

Risposte:


13

La $datapuò essere utilizzato per i dati popolano il vostro oggetto in quanto il costruttore \Magento\Framework\DataObjectè questo

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

o simile per Magento\Framework\Api\AbstractSimpleObject

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

da cui molte classi in Magento si estendono.

Un uso comune è in combinazione con una fabbrica. Ad esempio in Magento\Sales\Model\Order\CustomerManagementabbiamo:

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

che essenzialmente popola l' $dataarray al momento della creazione.

Dover mantenere la $data = []fine dell'elenco dei parametri è normale comportamento php poiché si assegna un valore predefinito: l'array vuoto.


16

La $data[]può essere utilizzato per valori di fissaggio passati dal di.xmlmeccanismo argomenti sostituzione 's, quando \Magento\Catalog\Block\Product\ListProductintantiated.

Nel tuo caso questo potrebbe essere popolato da

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

Puoi persino passare oggetti e altri formati a un array usando il meccanismo di cui sopra . Inoltre puoi usare quegli argomenti mentre estendi la funzionalità. Possiamo dire che è una specie di va_listin c.

Questo può essere usato quando non si desidera modificare il numero di argomenti in un costruttore e si desidera iniettare altre classi nelle funzionalità estese.


E come possiamo ottenere i dati da quell'array $ data? Puoi condividere un esempio esistente o altro.
Kingshuk Deb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.