Tôi muốn quấn đầu bằng cách sử dụng các thuộc tính mở rộng, ví dụ cho các mục trích dẫn.
Không có vấn đề gì khi thêm một thuộc tính tùy chỉnh vào một thực thể như vậy bằng cách sử dụng lớp thiết lập như trong Magento 1, đây không phải là câu hỏi này.
Hiện tại, phép thuật áp đảo tôi khi tôi muốn phơi bày một thuộc tính như vậy đã được thêm bởi một tiện ích mở rộng thông qua API thực thể dưới dạng một thuộc tính mở rộng.
CẬP NHẬT : Tôi biết làm thế nào các nhà máy thường xuyên được tạo ra. Câu hỏi này là về các nhà máy đặc biệt khởi tạo các triển khai được tạo cho các giao diện thuộc tính mở rộng được tạo.
Dưới đây là các bước tôi thực hiện để làm cho nó hoạt động. Tôi đang thêm những điều này để bất cứ ai cố gắng trả lời không cần phải đi sâu vào những chi tiết đó.
Câu hỏi của tôi là LÀM THẾ NÀO hoặc TẠI SAO nó hoạt động.
Các bước để hiển thị một thuộc tính mở rộng thông qua API thực thể:
- Tạo một
etc/extension_attributes.xml
thuộc tính thêm thuộc tính vào giao diện thực thể - Tạo một plugin để thêm giá trị thuộc tính vào thể hiện thực
ExtensionAttributes
thể.
Để làm điểm thứ hai, ExtensionAttributes
cần có thực thể. Vì lý do này, plugin phụ thuộc vào một nhà máy mà trình quản lý đối tượng cung cấp thông qua DI.
Đối với ví dụ mục trích dẫn Magento\Quote\Api\Data\CartItemExtensionFactory
phải được sử dụng.
Tôi đoán loại nhà máy này bằng cách nào đó phải là tác nhân kích hoạt ma thuật thế hệ.
Magento sau đó tạo giao diện phù hợp \Magento\Quote\Api\Data\CartItemExtensionInterface
với setters và getters cho tất cả các thuộc tính mở rộng.
Tuy nhiên, nó dường như không tạo ra việc triển khai cụ thể cho giao diện đó. Tại cho thuê PHPStorm không nhìn thấy nó.
Làm thế nào để Magento thu thập thông tin cần thiết để tạo ra lớp? Làm thế nào các phương thức giao diện được tạo có thể được gọi trên một ví dụ cụ thể? Đây có phải là một lớp chỉ được tạo trong bộ nhớ không?
Tôi rất vui vì nó hoạt động, nhưng điều đó không thực sự thỏa mãn. Khả năng Magentos sử dụng các thuộc tính được tạo tự động bởi các tiện ích mở rộng là một yếu tố quan trọng dẫn đến thành công của nó. Là một nhà phát triển mô-đun, tôi tin rằng tôi cần một sự hiểu biết thấu đáo về toàn bộ quá trình.
Tôi có nên dành thời gian cho bản thân mình không, nhưng tôi thích nếu tôi có thể giải thích.
CẬP NHẬT 2 : Mất một ít thời gian để đọc qua \Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator
và \Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator
. Bây giờ tôi ít nhất có một ý tưởng sơ bộ những gì đang xảy ra. Nếu không ai đánh bại tôi, tôi sẽ viết một mô tả về toàn bộ quá trình tại một thời điểm, vì tôi nghĩ đó sẽ là một tài liệu tham khảo hữu ích.