Как получить пользовательские атрибуты заказа в порядке по умолчанию Api-ответ в magento 2.3 - PullRequest
0 голосов
/ 27 марта 2019

Я создал новый атрибут пользовательского заказа с именем delivery_date и показал его в сетке заказов на продажу, но я не получаю пользовательский атрибут в ответе API моего заказа.

Ошибка, которую я получаю: Неустранимая ошибка: Uncaught Ошибка: вызов неопределенного метода Magento \ Sales \ Api \ Data \ OrderExtension :: setTipAndTrickAttribute ()

Пожалуйста, помогите.

app / code / Amos / CustomOrder / etc / di.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="delivery_date" xsi:type="string">sales_order.delivery_date</item>
                <item name="no_of_days" xsi:type="string">sales_order.no_of_days</item>
                <item name="no_of_crew" xsi:type="string">sales_order.no_of_crew</item>
            </argument>
        </arguments>
    </virtualType>    
</config>

Приложение / код / ​​Amos / CustomOrder / и т.д. / 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_delivery_date" instance="Magestore\TipAndTrick\Observer\Sales\OrderLoadAfter" />
</event>
</config>

Amos / CustomOrder / и т.д. / 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="delivery_date" type="string" />
</extension_attributes>
</config>  

Amos / CustomOrder / наблюдатель / Продажа / OrderLoadAfter.php

<?php
namespace Amos\CustomOrder\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('delivery_date');
    $extensionAttributes->setTipAndTrickAttribute($attr);
    $order->setExtensionAttributes($extensionAttributes);
}
private function getOrderExtensionDependency()
{
    $orderExtension = \Magento\Framework\App\ObjectManager::getInstance()->get(
        '\Magento\Sales\Api\Data\OrderExtension'
    );
    return $orderExtension;
}
}

1 Ответ

0 голосов
/ 28 марта 2019

Чтобы ответить на ваш вопрос об ошибке, вы используете неправильную магическую функцию. Ваши магические функции для этого атрибута setDeliveryDate().

Вы также должны убедиться, что ваш файл events.xml имеет правильный класс для наблюдателя. <observer name="sales_order_load_delivery_date" instance="Magestore\TipAndTrick\Observer\Sales\OrderLoadAfter" />

Пока ваш класс наблюдателя: Amos\CustomOrder\Observer\Sales\OrderLoadAfter

Когда вы используете пример материала, постарайтесь не забывать при необходимости изменять имена классов, пространств имен и функций. Вам также может понадобиться плагин репозитория заказов, чтобы фактически включить его в ответ API.

<type name="Magento\Sales\Api\OrderRepositoryInterface"> <plugin name="your_name_here_extension_attribute" type="<Vendor>\<Module>\Plugin\OrderRepositoryPlugin" /> </type>

...