Magento 2 - Hangi durumda di.xml kullanıyorum ve modül için di.xml nasıl kullanılır?


Yanıtlar:


54

What case We use di.xml ?

  • Belirli bir sınıfın (yeniden yazma) tercihi için di.xml kullanabiliriz.
  • Mevcut sınıf argümanlarını yeni gönderebilir veya değiştirebiliriz .
  • İşlevden önce, sonra ve çevresinde bazı şeyler yapmak için eklentileri kullanın
  • VirtualTypes kullanarak başka bir sınıfın alt sınıfını oluşturun.

Magento 2 müşteri modülünden kısa bir örnek verelim.

1.Preference

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

Kodun üstünde, birisi sizden bir örnek oluşturmanızı istediğinde, Magento\Customer\Api\AddressRepositoryInterfacebir Magento \ Customer \ Model \ ResourceModel \ AddressRepository nesnesini (type özniteliği) başlatır.

Sınıf tercihi yapılandırması sadece arayüzler için değil, gerçek sınıfları da değiştirebiliriz.

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

'CustomerManagement' için 'customModel' sınıfı oluşturabilir ve değişiklikleri yapabilirsiniz. Sınıf yeniden yazma sisteminin yerine sınıf tercih sistemi.

http://alanstorm.com/magento_2_object_manager_preferences

2. Tartışmalar

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

Yukarıdaki kodda, bağımsız değişken olarak nesne gönderiyoruz, sistemin adını "Proxy" sınıfına bir nesne olarak eklemek için diyoruz groupManagement. Ayrıca, Argümanları mevcut argümanı değiştirmek için de kullanabiliriz.

http://alanstorm.com/magento_2_object_manager_argument_replacement

3. Eklenti

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

Yukarıdaki kodda, public function clean($object)ziyaretçi sınıfında afterClean(Visitor $subject, $logResourceModel)Log sınıfındaki ortak işlevden sonra çağrılır .

4 Sanal Tür

Sanal tür oluşturmak, varolan bir sınıf için bir alt sınıf oluşturmak gibidir.

Daha fazla not için lütfen Alan'dan bağlantılar olarak bahsettiğim bazı pratik örnekleri inceleyin, pratikte daha net bir deneyim elde edebilirsiniz.

Bu yardımcı olur umarım.... :)


1
modül işlemini etkinleştirmek / devre dışı bırakmak için di.xml'de ifconfig ile set yapılandırması hakkında bir fikriniz var mı? Bu konuda lütfen sorunu çözmeme yardımcı olun.
Kartik Asodariya

Çok faydalı bilgiler.
Shivam

2
Birisi tüm bunları nasıl öğrenir?
Mohammed Joraid

Yani <preference> yerine "for" daki sınıfı çağırır, "type" veya başka bir şeyle sınıfı çağırır. hala bu konuda kafa karıştırıyorum. @@
fudu

3
oh nvm, bu gerçekten iyi cevabı burada buldum. inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.