Magento 2: quel est le paramètre constructeur $ data array?

21

J'ai donc remarqué que dans la plupart des modèles et des blocs, ce array $data = []paramètre est le dernier paramètre du constructeur .

Par exemple \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
    );
}

Je sais également que, lorsqu'il s'agit de préférences, vous devez toujours conserver ce paramètre à la fin de votre liste de paramètres de constructeur lorsque vous ajoutez plus de paramètres que le constructeur d'origine.

J'ai donc plusieurs questions concernant ce tableau :

  • qu'Est-ce que c'est ?
  • comment l'utiliser ?
  • pourquoi devons-nous le conserver à la fin de la liste des paramètres du constructeur lors de la déclaration des préférences pour un bloc qui ajoute plus de paramètres?
Raphael chez Digital Pianism
la source

Réponses:

13

Le $datapeut être utilisé pour les données Populate sur votre objet depuis le constructeur de \Magento\Framework\DataObjectest - ce

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

ou similaire pour Magento\Framework\Api\AbstractSimpleObject

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

dont beaucoup de classes dans Magento s'étendent.

Une utilisation courante est associée à une usine. Par exemple, Magento\Sales\Model\Order\CustomerManagementnous avons:

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

qui remplit essentiellement le $datatableau à la création.

Devoir garder le $data = []à la fin de la liste des paramètres est un comportement php normal puisque vous assignez une valeur par défaut - le tableau vide.

Kristof chez Fooman
la source
16

Le $data[]peut être utilisé pour conserver les valeurs transmises à partir di.xmldu mécanisme de remplacement des arguments de, lorsqu'il est \Magento\Catalog\Block\Product\ListProductinitié.

Dans votre cas, cela pourrait être rempli par

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

Vous pouvez même passer un objet et d'autres formats à un tableau en utilisant le mécanisme di ci-dessus . De plus, vous pouvez utiliser ces arguments tout en étendant les fonctionnalités. On peut dire, c'est une sorte de va_listc.

Cela peut être utilisé lorsque vous ne souhaitez pas modifier le nombre d'arguments dans un constructeur et que vous souhaitez injecter d'autres classes dans vos fonctionnalités étendues.

Codrain Technolabs Pvt Ltd
la source
Et comment obtenir les données de ce tableau $ data? Pouvez-vous partager un exemple existant ou quoi que ce soit.
Kingshuk Deb