Câu trả lời:
What case We use di.xml ?
Hãy để chúng tôi lấy một ví dụ nhanh từ mô-đun khách hàng Magento 2.
1.Preference
<preference for="Magento\Customer\Api\AddressRepositoryInterface"
type="Magento\Customer\Model\ResourceModel\AddressRepository" />
Ở trên mã, Khi ai đó yêu cầu bạn khởi tạo một, Magento\Customer\Api\AddressRepositoryInterface
nó sẽ khởi tạo một đối tượng Magento \ Customer \ Model \ ResourceModel \ addressRepousing (thuộc tính loại).
Cấu hình ưu tiên lớp không chỉ dành cho giao diện, chúng ta cũng có thể thay đổi các lớp thực tế.
<preference for="Magento\Customer\Model\CustomerManagement"
type="Magento\Customer\Model\customModel" />
Bạn có thể tạo lớp 'customModel' cho 'Quản lý khách hàng' và thực hiện các thay đổi. Hệ thống ưu tiên lớp thay thế cho hệ thống viết lại lớp.
http://alanstorm.com/magento_2_object_manager_preferences
2. Luận cứ
<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
<arguments>
<argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
</arguments>
</type>
Trong đoạn mã trên, Chúng tôi đang gửi đối tượng làm đối số, chúng tôi đang nói hệ thống chèn lớp "Proxy" làm đối tượng có tên groupManagement
. Ngoài ra, chúng ta cũng có thể sử dụng Đối số để thay thế đối số hiện có.
http://alanstorm.com/magento_2_object_manager_argument_Vplocation
3. Plugin
<type name="Magento\Customer\Model\ResourceModel\Visitor">
<plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>
Trong đoạn mã trên, public function clean($object)
trong lớp khách truy cập được gọi sau hàm công khai afterClean(Visitor $subject, $logResourceModel)
trong lớp Log.
4 loại ảo
Tạo một kiểu ảo giống như tạo một lớp con cho một lớp hiện có.
Để biết thêm lưu ý, vui lòng xem qua các ví dụ thực tế mà tôi đã đề cập dưới dạng liên kết từ Alan, bằng cách thực hành, bạn có thể có được kinh nghiệm rõ ràng hơn.
Hi vọng điêu nay co ich.... :)