Magento 1 Class Rewrite trong Magento 2 với Hệ thống tiêm phụ thuộc


10

Chọc qua mã lõi của Magento 2 , có vẻ như hệ thống viết lại lớp cũ đã bị loại bỏ và được thay thế bằng hệ thống tiêm phụ thuộc mới.

Thật không may, không có tài liệu cho hệ thống mới này.

Có ai có mẫu cấu hình mô-đun cho phép người dùng, trong Magento 2, "viết lại" lớp Mage_Catalog_Model_Productvới một lớp mới Packagename_Modulename_Model_Product, sử dụng hệ thống tiêm phụ thuộc mới không?


Tôi nghĩ rằng câu hỏi Magento 2.0 chưa được cho phép meta.magento.stackexchange.com/questions/79/ mẹo
Marius

Câu trả lời:


10

Cấu hình di đã được chuyển đến các tệp di.xml và định dạng đã được sửa đổi. Bây giờ các tùy chọn trông như thế này (di.xml):

<config>
    <preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>

Nếu nó là một lớp viết lại, nó có nên sử dụng một plugin thay vì một nút ưu tiên không?
huzefam

2
Nếu bạn cần thay thế hành vi của một số lớp cốt lõi, bạn nên sử dụng ưu tiên. Nếu bạn cần thay thế hành vi của một số phương thức cốt lõi, bạn nên sử dụng plugin với người nghe xung quanh sẽ không gọi $ process (). Nếu bạn cần thêm hành vi cho một số phương thức hoặc lớp cốt lõi, bạn nên sử dụng các bổ trợ.
Anton Kril

5

Làm việc từ trong ra ngoài, tôi đã có thể viết lại làm việc với những điều sau đây

<global>    
    <di>    
        <preferences>
            <Mage_Catalog_Model_Product>Packagename_Modulename_Model_Product</Mage_Catalog_Model_Product>
        </preferences> 
    </di>
</global>

Tuy nhiên, có rất nhiều mã hệ thống trong triển khai tiêm phụ thuộc, vì vậy không rõ liệu phần trên có hoạt động trong phiên bản phát hành cuối cùng của Magento 2 hay không.


Vì vậy, có vẻ như về cơ bản họ đã đổi tên "bí danh" thành sở thích và chuyển nó lên đầu? Hấp dẫn. Tôi mong muốn được xem các bản cập nhật cho tài liệu được tung ra. Peter nói họ có nó, nhưng tất cả đã không được đẩy ra trang web tài liệu, ít nhất là IIRC.
davidalger

5

Bạn đã đúng, các lớp viết lại đã bị loại bỏ hoàn toàn và được thay thế bằng DI. Các ghi chú sau đây là từ phần thay đổi Khung ứng dụng :

Magento 1.x - Nút: / global // {đường dẫn phụ tương ứng với tên nhà máy + "viết lại" bằng chữ}

<global>
...
    <models>
        <core>
            <rewrite>
                <url>My_Module_Model_Url</url>
            </rewrite>
        </core>
    </models>
...
</global>

Magento 2.x - Nút: / toàn cầu / di / bí danh

<global>
...
    <di>
        <aliases>
            <Mage_Core_Model_Url>My_Module_Model_Url</Mage_Core_Model_Url>
        </aliases>
    </di>
...
</global>

Tôi đã không thử sử dụng điều này trong một mô-đun chạy trong Magento 2.0, nhưng có vẻ như về cơ bản bạn xác định một bí danh cho tên lớp thay vì sử dụng hệ thống phân cấp phức tạp của xml cho việc viết lại mỗi mô-đun.


1
+1 cho trang Khung ứng dụng, nhưng điều này không hoạt động trong ảnh chụp nhanh Magento 2 mới nhất mà tôi đã chụp.
Alan Storm
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.