Cara menggunakan extension_attributes di Magento2

Jawaban:

18

Misalkan kita membuat tanggal pengiriman pesanan, ketika pelanggan memilih pengiriman maka pelanggan dapat memilih tanggal pengiriman. Jadi, Anda dapat membuat atribut ekstensi untuk \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface dengan cara berikut


<?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>

Jadi sekarang Anda dapat mengakses nilai ini ketika Anda menggunakan \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface as di.

Jadi dalam hal ini Magento \ Checkout \ Model \ ShippingInformationManagement kelas ini menggunakan \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface sebagai params untuk metode saveAddressInformation. Jadi Anda dapat mengakses dengan cara berikut:


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

Untuk lebih jelasnya (Dokumentasi Resmi Magento 2)

Berikut ini sebuah contoh:

extension_attributes

Pilih nilai Atribut Ekstensi

[Memperbarui]

Anda dapat mengatur extension_attributes dengan metode setExtensionAttributes . Kelas berikut adalah contohnya: Klik Di Sini

Sohel Rana
sumber
Jadi untuk apa setExtensionAttributes?
Phoenix128_RiccardoT
Saya memperbarui dengan contoh nyata
Sohel Rana
Hebat, tetapi ada satu hal yang hilang di sini: Di ​​mana tepatnya atribut ekstensi disimpan? Apakah saya harus menyediakan kode untuk menyimpan dan mengambil atribut sendiri atau dapatkah Magento mengatasinya (seperti dengan atribut khusus)?
Martin Wickman
Apakah saya memahaminya dengan benar bahwa plugin wajib untuk extension_attributesberfungsi? Misalnya, apakah saya selalu harus menambahkan plugin afterLoaduntuk pelanggan jika saya ingin memiliki atribut khusus untuk pelanggan? Sepertinya sedikit berlebihan bagi saya ...
Giel Berkers
1
@ MartinWickman ya itu adalah tanggung jawab pengembang untuk menerapkan logika untuk mengambil dan mempertahankan data atribut ekstensi. Konsepnya adalah, Anda memiliki beberapa data kompleks yang mungkin diperkenalkan oleh Modul untuk Entitas Produk Anda dan data ini mungkin berasal dari satu atau lebih tabel database, atau beberapa sumber data lain, itu tidak masalah. Menggunakan sistem Plugin, targetkan metode ProductRepository untuk memuat (mis., AfterGet, afterGetList). Di sini, Anda mengambil data Anda (dari mana pun) dan menambahkannya ke ExtensionAttributes Entitas. Ini sepertinya sulit tetapi sangat fleksibel dan kuat.
John Hall