Jawaban:
What case We use di.xml ?
Mari kita ambil contoh cepat dari modul pelanggan Magento 2.
1.Preferensi
<preference for="Magento\Customer\Api\AddressRepositoryInterface"
type="Magento\Customer\Model\ResourceModel\AddressRepository" />
Kode di atas, Ketika seseorang meminta Anda untuk instantiate, Magento\Customer\Api\AddressRepositoryInterface
itu akan instantiate objek Magento \ Pelanggan \ Model \ ResourceModel \ AddressRepository (atribut type).
Konfigurasi preferensi kelas bukan hanya untuk antarmuka kita dapat mengubah kelas yang sebenarnya juga.
<preference for="Magento\Customer\Model\CustomerManagement"
type="Magento\Customer\Model\customModel" />
Anda dapat membuat kelas 'customModel' untuk 'Manajemen Pelanggan' dan melakukan perubahan. Sistem preferensi kelas sebagai pengganti sistem penulisan ulang kelas.
http://alanstorm.com/magento_2_object_manager_preferences
2. Argumen
<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
<arguments>
<argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
</arguments>
</type>
Dalam kode di atas, Kami mengirim objek sebagai argumen, kami mengatakan sistem untuk memasukkan kelas "Proxy" sebagai objek dengan nama groupManagement
. Juga, kita dapat menggunakan Argumen untuk mengganti argumen yang ada juga.
http://alanstorm.com/magento_2_object_manager_argument_replacement
3. Plugin
<type name="Magento\Customer\Model\ResourceModel\Visitor">
<plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>
Dalam kode di atas, public function clean($object)
di kelas pengunjung dipanggil setelah fungsi publik afterClean(Visitor $subject, $logResourceModel)
yang ada di kelas Log.
4 Jenis Virtual
Membuat tipe virtual seperti membuat sub-kelas untuk kelas yang ada.
Untuk catatan lebih lanjut, silakan lihat contoh-contoh praktis yang saya sebutkan sebagai tautan dari Alan, dengan berlatih Anda bisa mendapatkan pengalaman yang lebih jelas.
Semoga ini membantu.... :)