Come usare extension_attributes in Magento2


Risposte:


18

Supponiamo di creare una data di consegna dell'ordine, quando il cliente seleziona la spedizione, il cliente può selezionare una data di consegna. Quindi puoi creare un attributo di estensione per \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface nel modo seguente


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

Quindi ora puoi accedere a questo valore quando usi \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface come di.

Quindi in quel caso Magento \ Checkout \ Model \ ShippingInformationManagement questa classe usa \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface come parametro per il metodo saveAddressInformation. Quindi puoi accedere nel modo seguente:


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

Per maggiori dettagli (documentazione ufficiale Magento 2)

Ecco un esempio:

extension_attributes

Seleziona il valore Attributi estensione

[Aggiornare]

È possibile impostare extension_attributes con il metodo setExtensionAttributes . La seguente lezione è un esempio: fai clic qui


Allora, a cosa serve setExtensionAttributes?
Phoenix128_RiccardoT

Ho aggiornato con un vero esempio
Sohel Rana,

Fantastico, ma qui manca una cosa: dove sono esattamente memorizzati gli attributi di estensione? Devo fornire il codice per il salvataggio e il recupero degli attributi da solo o Magento può gestirlo (come con gli attributi personalizzati)?
Martin Wickman,

Capisco correttamente che i plugin sono obbligatori per extension_attributesfunzionare? Ad esempio, devo sempre aggiungere un plug-in afterLoadper i clienti se voglio avere un attributo personalizzato per i clienti? Mi sembra un po 'sovraccarico ...
Giel Berkers,

1
@MartinWickman sì, è responsabilità dello sviluppatore implementare la logica per il recupero e il persistere dei dati degli attributi di estensione. Il concetto è che hai alcuni dati forse complessi introdotti dal tuo Modulo per entità di prodotto e questi dati potrebbero provenire da una o più tabelle del database o da qualche altra fonte di dati, non dovrebbe importare. Utilizzando il sistema Plugin, scegli come target i metodi di caricamento del ProductRepository (ad es. AfterGet, afterGetList). Qui, recuperi i tuoi dati (da qualsiasi luogo) e li aggiungi agli Attributi estensione entità. Questo sembra arduo ma è molto flessibile e potente.
John Hall,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.