Magento 2: Was ist der $ data array constructor Parameter?

21

Daher habe ich festgestellt, dass in den meisten Modellen und Blöcken dies array $data = []als letzter Parameter des Konstruktors angegeben ist .

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

Ich weiß auch, dass Sie beim Umgang mit Einstellungen diesen Parameter am Ende Ihrer Konstruktorparameterliste behalten müssen, wenn Sie mehr Parameter als den ursprünglichen Konstruktor hinzufügen.

Ich habe also einige Fragen zu diesem Array :

  • Was ist es ?
  • wie man es benutzt
  • Warum müssen wir es am Ende der Konstruktorparameterliste belassen, wenn wir Einstellungen für einen Block festlegen, der weitere Parameter hinzufügt?
Raphael beim digitalen Pianismus
quelle

Antworten:

13

Das $datakann verwendet werden, um Daten auf Ihrem Objekt zu füllen, da der Konstruktor von \Magento\Framework\DataObjectdies ist

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

oder ähnliches für Magento\Framework\Api\AbstractSimpleObject

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

Davon gehen viele Klassen in Magento aus.

Eine häufige Verwendung erfolgt in Verbindung mit einer Fabrik. Zum Beispiel in haben Magento\Sales\Model\Order\CustomerManagementwir:

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

Damit wird das $dataArray bei der Erstellung im Wesentlichen gefüllt.

Nachdem die halten $data = []am Ende der Liste der Parameter ist normal PHP Verhalten , da Sie einen Standardwert zuweisen - das leere Array.

Kristof bei Fooman
quelle
16

Das $data[]kann verwendet werden, um Werte zu speichern, die vom di.xmlErsetzungsmechanismus der Argumente übergeben wurden, wenn dies \Magento\Catalog\Block\Product\ListProductbeabsichtigt ist.

In Ihrem Fall könnte dies durch bevölkert werden

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

Sie können sogar Objekt und andere Formate zu einem Array übergeben oben mit di - Mechanismus. Außerdem können Sie diese Argumente verwenden, während Sie die Funktionalität erweitern. Wir können sagen, es ist eine Art va_listin c.

Dies kann verwendet werden, wenn Sie die Anzahl der Argumente in einem Konstruktor nicht ändern und andere Klassen in Ihre erweiterten Funktionen einfügen möchten.

Codrain Technolabs Pvt Ltd
quelle
Und wie erhalten wir die Daten aus diesem $ data-Array? Können Sie ein vorhandenes Beispiel oder etwas teilen.
Kingshuk Deb