Magento 2 - Trường hợp nào tôi sử dụng di.xml và Cách sử dụng di.xml cho mô-đun?


Câu trả lời:


51

What case We use di.xml ?

  • Chúng ta có thể sử dụng di.xml cho (viết lại) tùy chọn của một lớp cụ thể.
  • Chúng ta có thể gửi mới hoặc thay thế các đối số lớp hiện có .
  • Sử dụng plugin để thực hiện một số công cụ trước, sau và xung quanh chức năng
  • Bằng cách sử dụng virtualTypes tạo một lớp con của lớp khác.

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\AddressRepositoryInterfacenó 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.... :)


1
Bạn có biết gì về cấu hình đã đặt với ifconfig trong di.xml để bật / tắt quy trình mô-đun không? Nếu bạn về điều đó xin vui lòng giúp tôi giải quyết vấn đề.
Kartik Asodariya

Thông tin rất hữu ích.
Shivam

2
Làm thế nào để ai đó học tất cả những thứ này?
Mohammed Joraid

Vì vậy, <ưu tiên> thay vì gọi lớp trong "cho", nó gọi lớp theo "loại" hay gì đó? Tôi vẫn còn bối rối về điều này. @@
fudu

3
oh nvm, tôi tìm thấy câu trả lời thực sự tốt ở đây. inchoo.net/magento-2/overriding-groupes-magento-2 :)
fudu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.