分为 3 步:
- 配置 Package/Module/etc/extension_attributes.xml :
1
2
3
4
5
6
|
<?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="test_code" type="string" />
</extension_attributes>
</config>
|
- 在 Package/Module/etc/di.xml 中给需要进行扩展的 API Interface 声明一个 plugin:
例如 给 Magento\Sales\Api\OrderRepositoryInterface 添加一个 plugin:
1
2
3
4
5
6
|
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Sales\Api\OrderRepositoryInterface">
<plugin name="test_order_plugin" type="Package\Module\Plugin\Model\Sales\OrderPlugin" />
</type>
</config>
|
- 添加 plugin 类:
file: Package/Module/Plugin/Model/Sales/OrderPlugin;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<?php
namespace Package\Module\Plugin\Model\Sales;
use Magento\Sales\Api\Data\OrderExtensionFactory;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Sales\Api\Data\OrderInterface;
use Magento\Sales\Api\Data\OrderExtension;
class OrderPlugin
{
/**
* @var OrderExtensionFactory
*/
private $orderExtensionFactory;
/**
* @param OrderExtensionFactory $orderExtensionFactory
*/
public function __construct(
OrderExtensionFactory $orderExtensionFactory
) {
$this->orderExtensionFactory = $orderExtensionFactory;
}
/**
* Get reward points
*
* @param OrderRepositoryInterface $subject
* @param OrderInterface $resultOrder
* @return OrderInterface
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterGet(OrderRepositoryInterface $subject, OrderInterface $resultOrder)
{
$extensionAttributes = $resultOrder->getExtensionAttributes();
/** @var OrderExtension $orderExtension */
$orderExtension = $extensionAttributes
? $extensionAttributes
: $this->orderExtensionFactory->create();
$orderExtension->setTestCode($resultOrder->getTestCode());
$resultOrder->setExtensionAttributes($orderExtension);
return $resultOrder;
}
}
|
刷新缓存并编译后,API 请求中就会有新增的 extension attributes.