Cách sử dụng extension_attribut trong Magento2


Câu trả lời:


18

Giả sử chúng ta tạo một ngày giao hàng, khi khách hàng chọn vận chuyển thì khách hàng có thể chọn ngày giao hàng. Vì vậy, bạn có thể tạo thuộc tính tiện ích mở rộng cho \ Magento \ Checkout \ Api \ Data \ ShippingIn informationInterface theo cách sau


<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Checkout\Api\Data\ShippingInformationInterface">
        <attribute code="delivery_date" type="string"/>
    </extension_attributes>
</config>

Vì vậy, bây giờ bạn có thể truy cập giá trị này khi bạn sử dụng \ Magento \ Checkout \ Api \ Data \ ShippingIn informationInterface dưới dạng di.

Vì vậy, trong trường hợp đó Magento \ Checkout \ Model \ ShippingIn informationQuản lý lớp này sử dụng \ Magento \ Checkout \ Api \ Data \ ShippingIn informationInterface như một tham số cho phương thức saveAddressInform. Vì vậy, bạn có thể truy cập theo cách sau:


$extAttributes = $addressInformation->getExtensionAttributes();
$deliveryDate = $extAttributes->getDeliveryDate();

Để biết thêm chi tiết (Tài liệu chính thức Magento 2)

Đây là một ví dụ:

extension_attribut

Chọn giá trị thuộc tính mở rộng

[Cập nhật]

Bạn có thể đặt extension_attribut theo phương thức setExtensionAttribut . Lớp học sau đây là một ví dụ: Bấm vào đây


Vậy setExtensionAttribut dùng để làm gì?
Phoenix128_RiccardoT

Tôi đã cập nhật với ví dụ thực tế
Sohel Rana

Tuyệt vời, nhưng có một điều còn thiếu ở đây: Chính xác các thuộc tính mở rộng được lưu trữ ở đâu? Tôi có phải tự cung cấp mã để lưu và truy xuất các thuộc tính không hoặc Magento có thể xử lý việc đó (như với các thuộc tính tùy chỉnh) không?
Martin Wickman

Tôi có hiểu chính xác rằng các plugin là bắt buộc extension_attributesđể hoạt động không? Ví dụ: tôi có luôn phải thêm plugin afterLoadcho khách hàng nếu tôi muốn có thuộc tính tùy chỉnh cho khách hàng không? Có vẻ như hơi quá sức với tôi ...
Giel Berkers

1
@MartinWickman vâng, trách nhiệm của nhà phát triển là phải thực hiện logic để truy xuất và lưu giữ dữ liệu thuộc tính mở rộng. Khái niệm này là, bạn có một số dữ liệu phức tạp có thể được Mô-đun cho các Thực thể Sản phẩm giới thiệu và dữ liệu này có thể đến từ một hoặc nhiều bảng cơ sở dữ liệu hoặc một số nguồn dữ liệu khác, điều đó không thành vấn đề. Sử dụng hệ thống Plugin, nhắm mục tiêu các phương thức của ProductRep repository để tải (ví dụ: afterGet, afterGetList). Tại đây, bạn truy xuất dữ liệu của mình (từ bất cứ đâu) và thêm nó vào Phần mở rộng của Entity. Điều này có vẻ khó khăn nhưng rất linh hoạt và mạnh mẽ.
Hội trường John
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.