Odpowiedzi:
What case We use di.xml ?
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.... :)