Як використовувати extension_attributes в Magento2


15

extension_attributesХтось може надати мені приклад того, як використовувати в Magento2?


Ви дивилися на це ?
Стів Джонсон

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 як ді.

Тож у цьому випадку Magento \ Checkout \ Model \ ShippingInformationManagement цього класу використовують \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface як парами для методу saveAddressInformation. Таким чином, ви можете отримати доступ таким чином:


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

Детальніше (офіційна документація Magento 2)

Ось приклад:

extension_attributes

Вибір значення атрибутів розширення

[Оновлення]

Ви можете встановити extension_attributes методом setExtensionAttributes . Наступний клас - приклад: Клацніть тут


Отже, для чого встановленоExtensionAttributes?
Phoenix128_RiccardoT

Я оновив реальний приклад
Сохель Рана

Чудово, але тут відсутнє одне: де саме зберігаються атрибути розширення? Чи повинен я сам надати код для збереження та отримання атрибутів чи можу Magento впоратися з цим (як, наприклад, зі спеціальними атрибутами)?
Мартін Вікман

Я правильно розумію, що плагіни обов'язкові для того, extension_attributesщоб працювати? Наприклад, чи потрібно завжди додавати плагін afterLoadдля клієнтів, якщо я хочу мати спеціальний атрибут для клієнтів? Мені це здається трохи накладним…
Giel Berkers

1
@MartinWickman так, це відповідальність розробника за впровадження логіки для отримання та збереження даних атрибутів розширення. Поняття полягає в тому, що у вас є деякі, можливо, складні дані, введені вашим Модулем для суб'єктів продукту, і ці дані можуть надходити з однієї або декількох таблиць баз даних або іншого джерела даних, це не має значення. Використовуючи систему плагінів, орієнтуйтеся на методи завантаження продукту (наприклад, AfterGet, afterGetList). Тут ви отримуєте свої дані (звідки завгодно) та додаєте їх до розширень Entry's ExtensionAttributes. Це здається важким, але дуже гнучким і потужним.
Джон Холл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.