Magento 2 - W jakim przypadku używam di.xml i jak korzystać z di.xml dla modułu?

Odpowiedzi:

54

What case We use di.xml ?

  • Możemy użyć di.xml do (przepisania) preferencji określonej klasy.
  • Możemy wysyłać nowe lub zastępować istniejące argumenty klas .
  • Użyj wtyczek, aby wykonać pewne czynności przed, po i wokół funkcji
  • Poprzez użycie virtualTypes tworząc podklasę innej klasy.

Weźmy szybki przykład z modułu klienta Magento 2.

1. preferencja

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

Powyższy kod, gdy ktoś poprosi cię o utworzenie instancji Magento\Customer\Api\AddressRepositoryInterface, utworzy instancję Magento \ Customer \ Model \ ResourceModel \ AddressRepository (atrybut type).

Konfiguracja preferencji klas dotyczy nie tylko interfejsów, ale możemy również zmienić rzeczywiste klasy.

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

Możesz utworzyć klasę „customModel” dla „CustomerManagement” i wprowadzić zmiany. System preferencji klas jako zamiennik systemu przepisywania klas.

http://alanstorm.com/magento_2_object_manager_preferences

2. Argumenty

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

W powyższym kodzie wysyłamy obiekt jako argument, mówimy, że system wstawi klasę „Proxy” jako obiekt o nazwie groupManagement. Możemy również użyć argumentów do zastąpienia istniejącego argumentu.

http://alanstorm.com/magento_2_object_manager_argument_replacement

3. Wtyczka

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

W powyższym kodzie public function clean($object)w klasie gościa wywoływana jest funkcja publiczna, afterClean(Visitor $subject, $logResourceModel)która znajduje się w klasie Log.

4 typy wirtualne

Tworzenie typu wirtualnego przypomina tworzenie podklasy dla istniejącej klasy.

Aby uzyskać więcej informacji, proszę przejrzeć praktyczne przykłady, o których wspomniałem jako linki od Alana, dzięki praktyce możesz uzyskać bardziej przejrzyste doświadczenie.

Mam nadzieję że to pomoże.... :)

Krishna ijjada
źródło
1
Czy masz pojęcie o konfiguracji zestawu z ifconfig w di.xml do włączania / wyłączania procesu modułu? jeśli o tym mówisz, pomóż mi rozwiązać problem.
Kartik Asodariya
Bardzo przydatna informacja.
Shivam
2
Jak ktoś uczy się tych wszystkich rzeczy?
Mohammed Joraid,
Więc <preferencja> zamiast wywoływać klasę w „for”, wywołuje klasę w „typ” czy coś? Nadal jestem w tym zamieszany. @@
fudu
3
oh nvm, znalazłem tutaj naprawdę dobrą odpowiedź. inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu