如何通过Rest API获取自定义属性的值也是有用的教程,以便开发人员可以在运行自己的Magento 2商店时添加更多自定义字段。本主题将介绍在获取自定义属性的值时使用Rest API所必须遵循的所有基本步骤。
通过Rest API获取自定义属性值的概述
步骤1:添加新列并为现有订单设置值
要获得自定义属性,第一件事是插入一个新列(mageplaza_helloworld_custom_attribute
在表sales_order中称为)并为现有订单设置值。
步骤2:添加特定的新文件
由于Magento 2在Rest API的响应中不支持新字段,因此必须\app\code\Mageplaza\HelloWorld\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\Sales\Api\Data\OrderInterface">
<attribute code="mageplaza_helloworld_custom_attribute" type="string" />
</extension_attributes>
</config>
步骤3:添加观察值
要将自定义属性注入到中extension_attributes.xml
,必须为事件``sales_order_load_after via
\ app \ code \ Mageplaza \ HelloWorld \ etc \ events.xml`文件添加观察值。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_order_load_after">
<observer name="sales_order_load_helloworld_custom_attribute" instance="Mageplaza\HelloWorld\Observer\Sales\OrderLoadAfter" />
</event>
</config>
步骤4:添加文件以处理事件
生成一个文件app\code\Mageplaza\HelloWorld\Observer\Sales\OrderLoadAfter.php
来管理sales_order_load_after
上一步中的事件。
<?php
namespace Mageplaza\HelloWorld\Observer\Sales;
use Magento\Framework\Event\ObserverInterface;
class OrderLoadAfter implements ObserverInterface
{
public function execute(\Magento\Framework\Event\Observer $observer)
{
$order = $observer->getOrder();
$extensionAttributes = $order->getExtensionAttributes();
if ($extensionAttributes === null) {
$extensionAttributes = $this->getOrderExtensionDependency();
}
$attr = $order->getData('helloworld_custom_attribute');
$extensionAttributes->setHelloWorldCustomAttribute($attr);
$order->setExtensionAttributes($extensionAttributes);
}
private function getOrderExtensionDependency()
{
$orderExtension = \Magento\Framework\App\ObjectManager::getInstance()->get(
'\Magento\Sales\Api\Data\OrderExtension'
);
return $orderExtension;
}
}
步骤5:清理文件夹以激活功能
var\generation
如果要激活功能setHelloWorldCustomAttribute()
并getHelloWorldCustomAttribute
在var\generation\Magento\Sales\Api\Data\OrderExtension.php
自动生成的文件中,则需要删除该文件夹。
/**
* @return string|null
*/
public function getHelloWorldCustomAttribute()
{
return $this->_get('helloworld_custom_attribute');
}
/**
* @param string $helloWorldCustomAttribute
* @return $this
*/
public function setHelloWorldAttribute($helloWorldCustomAttribute)
{
$this->setData ('helloworld_custom_attribute', $helloWorldCustomAttribute);
return $this;
}