通过 REST API 获取自定属性的值

知道如何通过 REST API 获取自定属性的值是很有用的,开发人员就可以添加更多的自定义字段了。

概览

  • 第一步,添加新的列并且给已存在的订单设置值

  • 第二步,添加新的特定文件

  • 第三步,添加 observe

  • 第四步,添加事件处理的文件

  • 第五步,清空文件夹以激活方法

第一步,添加新的列并且给已存在的订单设置值

为了获取自定义属性,第一件事就是在 sales_order 表格中插入一个名为 mageplaza_helloworld_custom_attribute 的列,并且给已有的订单设置值。

第二步,添加新的特定文件

因为 Magento2 在 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>

第三步,添加 observe

为了把自定义属性插入到 extension_attributes.xml 中,必须通过文件 \app\code\Mageplaza\HelloWorld\etc\events.xml 为事件 ‘sales_order_load_after’ 添加 observe 。

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

第四步,添加事件处理的文件

创建文件 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;
 
}
 
}

第五步,清空文件夹以激活方法

如果想要激活文件 var\generation\Magento\Sales\Api\Data\OrderExtension.php 中的方法 setHelloWorldCustomAttribute() 和 getHelloWorldCustomAttribute ,需要清空文件夹 var\generation 。

/**
  * @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;
}

本教程翻译自Mageplaza模块开发系列,其他内容请点击下面链接: