Magento 2-di.xml을 사용하는 경우와 모듈에 di.xml을 사용하는 방법은 무엇입니까?


답변:


54

What case We use di.xml ?

  • 특정 클래스의 환경 설정을 위해 (rewrite) di.xml을 사용할 수 있습니다.
  • 새로운 클래스를 보내거나 기존 클래스 인수를 대체 할 수 있습니다 .
  • 기능을 사용하기 전후에 플러그인을 사용하여 몇 가지 작업을 수행하십시오.
  • virtualType을 사용하여 다른 클래스의 서브 클래스를 작성합니다.

Magento 2 고객 모듈에서 간단한 예를 들어 보겠습니다.

1. 선호

<preference for="Magento\Customer\Api\AddressRepositoryInterface"
            type="Magento\Customer\Model\ResourceModel\AddressRepository" />

위의 코드에서 누군가 인스턴스화를 요청하면 Magento\Customer\Api\AddressRepositoryInterfaceMagento \ Customer \ Model \ ResourceModel \ AddressRepository 개체 (유형 특성)가 인스턴스화됩니다.

클래스 기본 설정 구성은 인터페이스를위한 것이 아니라 실제 클래스를 변경할 수도 있습니다.

<preference for="Magento\Customer\Model\CustomerManagement"
            type="Magento\Customer\Model\customModel" />

'CustomerManagement'에 대한 'customModel'클래스를 작성하고 변경을 수행 할 수 있습니다. 클래스 재 작성 시스템을 대체하는 클래스 환경 설정 시스템.

http://alanstorm.com/magento_2_object_manager_preferences

2. 인수

<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
    <arguments>
        <argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
    </arguments>
</type>

위의 코드에서 우리는 객체를 인수로 보내고 있으며, "Proxy"클래스를 이름이 인 객체로 삽입하는 시스템을 말합니다 groupManagement. 또한 기존 인수를 대체하기 위해 Arguments를 사용할 수도 있습니다.

http://alanstorm.com/magento_2_object_manager_argument_replacement

3. 플러그인

<type name="Magento\Customer\Model\ResourceModel\Visitor">
    <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>

위의 코드 public function clean($object)에서 방문자 클래스는 afterClean(Visitor $subject, $logResourceModel)Log 클래스에있는 공용 함수 후에 호출 됩니다.

4 가지 가상 유형

가상 유형을 만드는 것은 기존 클래스의 하위 클래스를 만드는 것과 같습니다.

더 많은 참고를 위해 Alan의 링크로 언급 한 실제 사례를 살펴보십시오. 실제로 더 명확한 경험을 얻을 수 있습니다.

도움이 되었기를 바랍니다.... :)


1
모듈 프로세스 활성화 / 비활성화를위한 di.xml의 ifconfig를 사용한 설정 구성에 대해 알고 있습니까? 당신이 그것에 대해 문제를 해결하도록 도와주세요.
Kartik Asodariya

매우 유용한 정보입니다.
Shivam

2
누군가이 모든 것들을 어떻게 배우나요?
Mohammed Joraid

따라서 <preference>는 "for"에서 클래스를 호출하는 대신 "type"또는 다른 클래스로 호출합니까? 나는 아직도 이것에 대해 혼란 스럽다. @@
fudu

3
오 nvm, 나는 이것이 정말로 좋은 대답을 찾았습니다. inchoo.net/magento-2/overriding-classes-magento-2 :
fudu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.