如何在Magento2中使用extension_attributes


Answers:


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此类使用\ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface作为saveAddressInformation方法的参数。这样您就可以访问以下方式:


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

有关更多详细信息(Magento 2官方文档)

这是一个例子:

extension_attributes

选择扩展属性值

[更新]

您可以通过setExtensionAttributes方法设置extension_attributes 。以下课程是一个示例: 单击此处


那么setExtensionAttributes的作用是什么?
Phoenix128_RiccardoT

我以真实的例子进行了更新
Sohel Rana

很好,但是这里缺少一件事:扩​​展属性到底存储在哪里?我是否必须提供用于自己保存和检索属性的代码,或者Magento可以处理该代码(例如使用自定义属性)?
Martin Wickman

我是否正确理解插件是必需的才能extension_attributes正常工作?例如,afterLoad如果要为客户提供自定义属性,是否总是需要为客户添加插件?对我来说似乎有些开销……
Giel Berkers,2016年

1
@MartinWickman是的,开发人员有责任实现用于检索和持久化扩展属性数据的逻辑。这个概念是,您的产品实体模块引入了一些可能复杂的数据,并且该数据可能来自一个或多个数据库表或某些其他数据源,这无关紧要。使用插件系统,以ProductRepository的加载方法为目标(例如,afterGet,afterGetList)。在这里,您可以从任何地方检索数据并将其添加到实体的ExtensionAttributes中。这似乎很艰巨,但非常灵活和强大。
约翰·霍尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.