Ghi đè lớp proxy Magento 2


8

Tôi cần ghi đè lớp \Magento\Catalog\Model\Product\Linkbằng cách sử dụng tùy chọn đang hoạt động tốt, nhưng lớp được đề cập ở trên có lớp proxy được tạo tự động \Magento\Catalog\Model\Product\Link\Proxy, không bao gồm các phương thức mới được thêm vào trong ghi đè. Có cách nào chúng ta có thể tiêm các phương thức đó trong lớp proxy không?

BIÊN TẬP

Tôi đã cố gắng đào sâu vào vấn đề này và thấy rằng chúng ta có thể tiêm proxy bằng di.xml. Nhưng khi tôi cố gắng làm điều đó, tôi đã có một ngoại lệ là lớp Package\Module\Model\Class\ProxyKhông tồn tại. Điều đó có nghĩa là proxy mới mà tôi đang cố gắng tạo không được tạo tự động.


Taral, phiên bản Magento của bạn có được đặt ở chế độ nhà phát triển không? Nếu không, bạn cần biên dịch di để tạo proxy.
Ivan Chepurnyi

Tại sao bạn thêm phương thức vào lớp này?
KAndy

Ivan, ví dụ magento của tôi ở chế độ nhà phát triển
Taral Patoliya

@KAndy Tôi cần thêm chức năng chính xác như các sản phẩm liên quan, vì vậy để làm điều đó, tôi cần thêm một số phương pháp cho loại liên kết mới. như tôi đã nhận thấy mọi loại liên kết (liên quan, cross_sell, up-sell) đều có các phương thức riêng trong lớp đó.
Taral Patoliya

có thể bạn không chỉ cần tạo ra các lớp proxy bằng tay và thiết lập trong di.xmlmột sở thích cho \Magento\Catalog\Model\Product\Link\Proxytới Package\Module\Model\Class\Proxy?
Marius

Câu trả lời:


5

Sau khi đọc các bình luận mà bạn đã nêu:

Tôi đã làm điều tương tự và nó đã làm việc. Tôi đã giải quyết với giải pháp đó. nhưng tôi muốn tạo một lớp proxy mới có các phương thức mới đi kèm. Vì lớp proxy được sử dụng để giảm tải khởi tạo lớp. bây giờ vì lớp proxy không còn được sử dụng, lớp ban đầu sẽ tải thêm một số máy chủ. nhưng tôi nghĩ nó không đáng kể

Toàn bộ vấn đề bạn đang cố gắng giải quyết, có thể được thực hiện theo cách thanh lịch hơn và ít nâng cấp đau đớn hơn.

Nếu bạn vừa thêm các phương thức mới vào triển khai hiện có, điều đó có nghĩa là bạn không thay đổi hành vi của lớp gốc

  1. Bạn nên tránh mở rộng các phương thức công khai của lớp hiện có để tạo lớp của riêng bạn sử dụng lớp gốc làm phụ thuộc
  2. Sau đó vượt qua lớp học của bạn ở nơi bạn đang sử dụng lớp gốc

Điều này mang lại cho bạn những lợi ích phụ như vậy:

  1. Bạn mã dễ dàng hơn để kiểm tra nó (phụ thuộc duy nhất vào việc chế nhạo tất cả các phụ thuộc cốt lõi)
  2. Nó không vi phạm nguyên tắc trách nhiệm duy nhất
  3. Nó không ảnh hưởng đến cốt lõi ở những nơi bạn không mong đợi
  4. Nó tách logic logic kinh doanh của bạn khỏi triển khai cốt lõi

2

Tôi đã quản lý để tạo Proxy.phptệp chính xác bao gồm chức năng mới của mình bằng cách thêm phần sau vào mô-đun của mìnhdi.xml

<type name="Magento\Catalog\Model\Product">
    <arguments>
        <argument name="productLink" xsi:type="object">Package\Module\Model\Product\Link\Proxy</argument>
    </arguments>
</type>

Cảm ơn @minlare đã giúp đỡ

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.