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\Sales\Model\Order\CustomerManagementнас є:

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

який по суті заповнює $dataмасив при створенні.

Необхідно зберегти $data = []в кінці списку параметрів - це нормальна поведінка php, оскільки ви призначаєте значення за замовчуванням - порожній масив.


16

$data[]Може бути використано для значень трюму , що передаються від di.xml«S механізму заміни аргументів, коли \Magento\Catalog\Block\Product\ListProductintantiated.

У вашому випадку це може бути заповнено

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

Ви навіть можете передати об'єкт і інші формати в масив , використовуючи вище ді механізму. Далі ви можете використовувати ці аргументи під час розширення функціональності. Можна сказати, це свого роду va_listв с.

Це можна використовувати, коли ви не хочете змінювати кількість аргументів у конструкторі та хочете вставити інші класи у розширені функції.


І як ми отримуємо дані з цього масиву $ data? Чи можете ви поділитися наявним прикладом чи чим-небудь.
Кінгшук Деб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.