Magento2'de extension_attributes nasıl kullanılır?


Yanıtlar:


18

Bir sipariş teslim tarihi oluşturduğumuzu varsayalım, müşteri gönderim bedelini seçtiğinde müşteri bir teslim tarihi seçebilir. Böylece \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface için şu şekilde bir uzantı özelliği oluşturabilirsiniz


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

Böylece \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface öğesini di olarak kullandığınızda bu değere erişebilirsiniz .

Bu durumda Magento \ Checkout \ Model \ ShippingInformationManagement bu sınıf , saveAddressInformation yöntemi için bir parametre olarak \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface öğesini kullanır. Böylece aşağıdaki şekilde erişebilirsiniz:


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

Daha fazla bilgi için (Magento 2 Resmi Belgeleri)

İşte bir örnek:

extension_attributes

Uzantı Özelliklerini Seç değeri

[Güncelleme]

Extension_attributes öğesini setExtensionAttributes yöntemiyle ayarlayabilirsiniz . Aşağıdaki sınıf bir örnektir: Buraya Tıklayın


Peki setExtensionAttributes ne için?
Phoenix128_RiccardoT

Gerçek örnekle güncelledim
Sohel Rana

Harika, ama burada bir şey eksik: Uzantı özellikleri tam olarak nerede saklanıyor? Öznitelikleri kaydetmek ve almak için kod sağlamam gerekiyor mu veya Magento bunu (özel özniteliklerde olduğu gibi) işleyebilir mi?
Martin Wickman

extension_attributesÇalışmak için eklentilerin zorunlu olduğunu doğru anladım mı? Örneğin, afterLoadmüşteriler için özel bir özelliğe sahip olmak istiyorsam müşteriler için her zaman bir eklenti eklemem gerekir mi? Bana biraz havai görünüyor ...
Giel Berkers

1
@MartinWickman evet, uzantı öznitelik verilerinin alınması ve sürdürülmesi için mantık uygulamak geliştiricinin sorumluluğundadır. Kavram, Ürün Varlıkları için Modülünüz tarafından sunulan bazı karmaşık verileriniz olması ve bu verilerin bir veya daha fazla veritabanı tablosundan veya başka bir veri kaynağından gelmesi önemli değildir. Eklenti sistemini kullanarak ProductRepository'nin yükleme yöntemlerini (örn. AfterGet, afterGetList) hedefleyin. Burada, verilerinizi (her yerden) alır ve Varlığın ExtensionAttributes öğesine eklersiniz. Bu zorlu görünüyor, ancak çok esnek ve güçlü.
John Hall
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.