Magento2でextension_attributesを使用する方法


回答:


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として使用すると、この値にアクセスできます。

そのため、この場合、Magento \ Checkout \ Model \ ShippingInformationManagementこのクラスは、saveAddressInformationメソッドのパラメーターとして\ Magento \ Checkout \ Api \ Data \ ShippingInformationInterfaceを使用します。したがって、次の方法でアクセスできます。


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

詳細については(Magento 2公式ドキュメント)

次に例を示します。

extension_attributes

拡張属性値を選択

[更新]

setExtensionAttributesメソッドによってextension_attributesを設定できます。次のクラスは例です。 ここをクリック


それでは、setExtensionAttributesは何のためにあるのでしょうか?
Phoenix128_RiccardoT

私は実際の例で更新
ソエル・ラナ

すばらしいですが、ここで1つ欠けています。拡張属性は正確にどこに保存されていますか?属性を自分で保存および取得するためのコードを提供する必要がありますか、Magentoはそれを処理できますか(カスタム属性の場合と同様)?
マーティンウィックマン

プラグインが機能するためextension_attributesに必須であることを正しく理解していますか?たとえばafterLoad、顧客用のカスタム属性が必要な場合、顧客用のプラグインを常に追加する必要がありますか?...私には少しのオーバーヘッドのように思える
Giel Berkers

1
@MartinWickmanはい、拡張属性データを取得して保持するためのロジックを実装するのは開発者の責任です。概念は、Product for Product Entitiesによって導入される可能性のあるいくつかの複雑なデータがあり、このデータは1つ以上のデータベーステーブル、または他のデータソースからのものである可能性があります。プラグインシステムを使用して、ロードするProductRepositoryのメソッド(afterGet、afterGetListなど)をターゲットにします。ここでは、データを(どこからでも)取得して、エンティティのExtensionAttributesに追加します。これは困難に思えますが、非常に柔軟で強力です。
ジョンホール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.