Magento 2 中扩展属性(extension_attributes.xml)的用途是什么?


原文章:https://aureatelabs.com/blog/what-is-the-purpose-of-extension-attributes-in-magento-2/


nba2k2球员数据


google翻译:


本文将介绍如何使用 Magento 2 中的扩展属性。扩展属性主要是用于向我们的实体添加附加信息的容器。

每个扩展的接口\Magento\Framework\Api\ExtensibleDataInterface都可以在扩展属性的帮助下进行扩展。中定义的方法ExtensibleDataInterface授予对包含附加数据的对象的访问权限。

下面的示例将让您清楚地了解我们试图解释的内容。首先,我们将创建一个名为 DemoModule 的模块。

第 1 步 - 声明扩展属性

我们将在app/code/Aureatelabs/DemoModule/etc/extension_attributes.xml

<?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="custom_shipping_charge" type="string"/>
   </extension_attributes>
</config>


这意味着我们正在使用属性扩展我们的运输信息接口。它可以从$order->getExtensionAttributes()->getCustomShippingAttribute().

以下是简短的描述,将解释这些词的含义:

  • for – 具有处理扩展的命名空间的完全限定类型名称。该值必须是实现 `ExtensibleDataInterface` 的类型。该接口可以在不同的模块中。

  • code – 属性的名称。属性名称应该是蛇形(每个单词的第一个字母应该是小写,每个单词用下划线分隔)。 

  • type – 数据类型。这可以是简单的数据类型,例如字符串或整数,也可以是复杂的类型,例如接口。

第 2 步 - 清除生成的文件

现在清除var/generation运行setup:di:compile命令时,将添加新的 getter 和 setter 方法/var/generation/Magento/Checkout/Api/Data/ShippingInformationExtensionInterface.php

第 3 步 – 设置/获取属性

现在您可以通过创建Magento/Checkout/Api/Data/ShippingInformationInterface.php接口实例来设置/获取这些属性值。

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$addressInformation = $objectManager->create('Magento\Checkout\Api\Data\ShippingInformationInterface');
$extAttributes = $addressInformation->getExtensionAttributes();

$selectedShipping = $extAttributes->getCustomShippingCharge();


需要注意的一件重要事情是,要使扩展属性按建议工作,我们始终需要getExtensionAttributes()在使用扩展属性工厂创建新属性工厂之前查询实体以获取现有的 extension_attributes。如果我们忽略此检查,我们将清除之前在实体上设置的任何扩展属性。

您将从使用扩展属性中获得的好处之一是您添加的属性数据可通过 API 请求自动获得。


nba2k2球员数据
请先登录后发表评论
  • 最新评论
  • 总共0条评论