Magento 2:$ data配列コンストラクターパラメーターとは何ですか?


21

そのため、ほとんどのモデルとブロックでは、コンストラクターの最後のパラメーターとしてこれがarray $data = []指定されていることに気付きました。

例えば \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
    );
}

また、好みを扱うとき、あなたは とき、元のコンストラクターよりも多くのパラメーターを追加する場合、そのパラメーターをコンストラクターパラメーターリストの最後に保持する必要があるいます

したがって、この配列に関していくつかの質問があります

  • それは何ですか ?
  • それの使い方 ?
  • パラメータを追加するブロックの設定を宣言するときに、コンストラクタパラメータリストの最後に保持する必要があるのはなぜですか?

回答:


13

$dataコンストラクタ\Magento\Framework\DataObjectはこれであるため、を使用してオブジェクトにデータを入力できます

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

または Magento\Framework\Api\AbstractSimpleObject

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

Magentoの多くのクラスの拡張元です。

一般的な用途は、工場との併用です。たとえば、 Magento\Sales\Model\Order\CustomerManagement次のものがあります。

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

これは、基本的$dataに作成時に配列に入力します。

$data = []パラメーターのリストの最後に保持する必要があるのは、デフォルト値(空の配列)を割り当てているため、通常のphpの動作です。


16

$data[]渡されたホールド値に使用することができますdi.xmlの引数交換メカニズム、\Magento\Catalog\Block\Product\ListProductインスタンス化された。

あなたの場合、これは

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

上記のdiメカニズムを使用して、オブジェクトやその他の形式を配列に渡すこともできます。さらに、機能を拡張しながらこれらの引数を使用できます。va_listcのようなものだと言えます。

これは、コンストラクター内の引数の数を変更したくない場合や、拡張機能に他のクラスを注入したい場合に使用できます。


そして、どのようにしてその$ data配列からデータを取得しますか?既存のサンプルなどを共有できますか。
キングシュクデブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.