Verwendung von extension_attributes in Magento2

Antworten:

18

Angenommen, wir erstellen ein Bestell-Lieferdatum. Wenn der Kunde den Versand auswählt, kann er ein Lieferdatum auswählen. So können Sie eine Erweiterungsattribut für erstellen \ Magento \ Kasse \ Api \ Data \ ShippingInformationInterface in folgenden Weise


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

Sie können jetzt auf diesen Wert zugreifen, wenn Sie \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface als di verwenden.

In diesem Fall verwendet Magento \ Checkout \ Model \ ShippingInformationManagement diese Klasse \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface als Parameter für die Methode saveAddressInformation. So können Sie folgendermaßen zugreifen:


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

Für mehr Details (Magento 2 Official Documentation)

Hier ist ein Beispiel:

extension_attributes

Wählen Sie den Wert für die Erweiterungsattribute

[Aktualisieren]

Sie können extension_attributes mit der setExtensionAttributes- Methode festlegen . Die folgende Klasse ist ein Beispiel: Klicken Sie hier

Sohel Rana
quelle
Wozu dient setExtensionAttributes?
Phoenix128_RiccardoT
Ich habe mit echtem Beispiel aktualisiert
Sohel Rana
Großartig, aber eines fehlt hier: Wo genau werden Erweiterungsattribute gespeichert? Muss ich Code zum Speichern und Abrufen von Attributen selbst bereitstellen oder kann Magento das (wie bei benutzerdefinierten Attributen)?
Martin Wickman
Verstehe ich richtig, dass Plugins obligatorisch sind, um extension_attributeszu funktionieren? Muss ich beispielsweise immer ein Plugin für afterLoadKunden hinzufügen, wenn ich ein benutzerdefiniertes Attribut für Kunden haben möchte? Scheint mir ein bisschen überfordert zu sein ...
Giel Berkers
1
@MartinWickman Ja, es liegt in der Verantwortung des Entwicklers, eine Logik zum Abrufen und Speichern von Erweiterungsattributdaten zu implementieren. Das Konzept ist, dass Sie einige möglicherweise komplexe Daten von Ihrem Modul für Produktentitäten eingeführt haben und diese Daten möglicherweise aus einer oder mehreren Datenbanktabellen oder einer anderen Datenquelle stammen. Dies sollte keine Rolle spielen. Verwenden Sie das Plugin-System, um die Methoden des ProductRepository zum Laden auszuwählen (z. B. afterGet, afterGetList). Hier rufen Sie Ihre Daten ab (von wo auch immer) und fügen sie den ExtensionAttributes der Entität hinzu. Dies scheint mühsam, ist aber sehr flexibel und leistungsstark.
John Hall