วิธีใช้ extension_attributes ใน Magento2


15

มีใครบ้างที่สามารถยกตัวอย่างเกี่ยวกับวิธีการใช้extension_attributesใน Magento2 ได้ไหม?


คุณเคยดูสิ่งนี้หรือไม่?
Steve Johnson

1
ใช่ฉันทำ แต่ก็ไม่ชัดเจนสำหรับฉัน
Phoenix128_RiccardoT

คำตอบ:


18

สมมติว่าเราสร้างวันที่ส่งมอบคำสั่งซื้อเมื่อลูกค้าเลือกการจัดส่งแล้วลูกค้าสามารถเลือกวันที่จัดส่ง ดังนั้นคุณสามารถสร้างแอตทริบิวต์ส่วนขยายสำหรับ \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterfaceด้วยวิธีต่อไปนี้


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

ดังนั้นตอนนี้คุณสามารถเข้าถึงค่านี้เมื่อคุณใช้\ Magento \ Checkout \ Api \ Data \ ShippingInformationInterfaceเป็น di

ดังนั้นในกรณีนี้วีโอไอพี \ Checkout \ Model \ Shippingข้อมูลการจัดการการใช้คลาสนี้\ Magento \ Checkout \ Api \ Data \ ShippingInformationอินเทอร์เฟซเป็นพารามิเตอร์สำหรับวิธีการบันทึกที่อยู่ ดังนั้นคุณสามารถเข้าถึงวิธีต่อไปนี้:


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

สำหรับรายละเอียดเพิ่มเติม (Magento 2 Official Documentation)

นี่คือตัวอย่าง:

extension_attributes

เลือกค่าคุณสมบัติส่วนขยาย

[Update]

คุณสามารถตั้งค่า extension_attributes โดยวิธีsetExtensionAttributes ตัวอย่างคลาสต่อไปนี้: คลิกที่นี่


ดังนั้น setExtensionAttributes มีไว้เพื่ออะไร
Phoenix128_RiccardoT

ฉันอัปเดตด้วยตัวอย่างจริง
Sohel Rana

เยี่ยมมาก แต่มีสิ่งหนึ่งหายไปที่นี่: ที่เก็บแอตทริบิวต์ส่วนขยายอยู่ที่ไหน ฉันต้องให้รหัสสำหรับการบันทึกและการดึงคุณสมบัติด้วยตัวเองหรือ Magento สามารถจัดการกับมันได้ (เช่นเดียวกับคุณสมบัติที่กำหนดเอง) หรือไม่?
Martin Wickman

ฉันเข้าใจถูกต้องหรือไม่ว่าปลั๊กอินเป็นสิ่งจำเป็นสำหรับextension_attributesการทำงาน ตัวอย่างเช่นฉันจะต้องเพิ่มปลั๊กอินafterLoadสำหรับลูกค้าหรือไม่หากฉันต้องการมีแอตทริบิวต์ที่กำหนดเองสำหรับลูกค้า ดูเหมือนว่าค่าใช้จ่ายเล็กน้อยเพื่อฉัน ...
Giel Berkers

1
@MartinWickman ใช่มันเป็นความรับผิดชอบของนักพัฒนาที่จะใช้ตรรกะในการดึงและคงอยู่ของข้อมูลแอตทริบิวต์ส่วนขยาย แนวคิดคือคุณมีข้อมูลที่ซับซ้อนที่อาจนำมาใช้โดยโมดูลสำหรับหน่วยงานผลิตภัณฑ์ของคุณและข้อมูลนี้อาจมาจากตารางฐานข้อมูลหนึ่งตารางหรือมากกว่านั้นหรือแหล่งข้อมูลอื่น ๆ ใช้ระบบปลั๊กอินกำหนดเป้าหมายวิธีการของ ProductRepository สำหรับการโหลด (เช่น afterGet, afterGetList) ที่นี่คุณสามารถดึงข้อมูลของคุณ (จากที่ใดก็ได้) และเพิ่มลงใน ExtensionAttributes ของ Entity ดูเหมือนจะลำบาก แต่มีความยืดหยุ่นและทรงพลังมาก
John Hall
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.