Jak korzystać z rozszerzeń_atrybutów w Magento2

Odpowiedzi:

18

Załóżmy, że tworzymy datę dostawy zamówienia, kiedy klient wybiera wysyłkę, wtedy klient może wybrać datę dostawy. Możesz więc utworzyć atrybut rozszerzenia dla \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface w następujący sposób


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

Teraz możesz uzyskać dostęp do tej wartości, używając \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface jako di.

W takim przypadku Magento \ Checkout \ Model \ ShippingInformationManagement w tej klasie użyj \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface jako parametrów metody saveAddressInformation. Aby uzyskać dostęp do następującego sposobu:


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

Aby uzyskać więcej informacji (oficjalna dokumentacja Magento 2)

Oto przykład:

rozszerzenia_atrybuty

Wybierz wartość atrybutów rozszerzenia

[Aktualizacja]

Można ustawić rozszerzenie_atrybuty metodą setExtensionAttributes . Następująca klasa jest przykładem: Kliknij tutaj

Sohel Rana
źródło
Więc po co jest setExtensionAttributes?
Phoenix128_RiccardoT
Zaktualizowałem z prawdziwym przykładem
Sohel Rana
Świetnie, ale brakuje tutaj jednej rzeczy: gdzie dokładnie są przechowywane atrybuty rozszerzenia? Czy muszę sam podać kod do zapisywania i pobierania atrybutów, czy może Magento sobie z tym poradzi (podobnie jak w przypadku atrybutów niestandardowych)?
Martin Wickman
Czy rozumiem poprawnie, że wtyczki są wymagane extension_attributesdo działania? Na przykład, czy zawsze muszę dodawać wtyczkę afterLoaddla klientów, jeśli chcę mieć niestandardowy atrybut dla klientów? Wydaje mi się to trochę nad głową ...
Giel Berkers
1
@MartinWickman tak, to do programisty należy wdrożenie logiki pobierania i utrwalania danych atrybutów rozszerzenia. Koncepcja polega na tym, że niektóre potencjalnie złożone dane zostały wprowadzone przez moduł dla jednostek produktu i dane te mogą pochodzić z jednej lub więcej tabel bazy danych lub innego źródła danych, nie powinno to mieć znaczenia. Korzystając z systemu wtyczek, celuj metody ładowania ProductRepository (np. AfterGet, afterGetList). Tutaj pobierasz swoje dane (skądkolwiek) i dodajesz je do atrybutów rozszerzenia encji. Wydaje się to uciążliwe, ale jest bardzo elastyczne i potężne.
John Hall