마 젠토 2 : $ data array constructor 매개 변수는 무엇입니까?


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>

당신은 위에 사용하여 배열로 객체와 다른 형식을 전달할 수 있습니다 메커니즘. 또한 기능을 확장하면서 이러한 인수를 사용할 수 있습니다. 우리는 말할 수 있습니다 va_list. c.

생성자의 인수 수를 수정하지 않고 확장 기능에 다른 클래스를 삽입하려는 경우에 사용할 수 있습니다.


그리고 어떻게 $ data 배열에서 데이터를 얻습니까? 기존 예제 나 다른 것을 공유 할 수 있습니까?
Kingshuk Deb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.