Magento 2 - การใช้ Object Manager

Sep 24 2020

ฉันมีโมดูลที่ใส่ข้อมูลการจัดส่งบางส่วนในมุมมองคำสั่งซื้อของผู้ดูแลระบบ ฉันกำลังพยายามแสดงวิธีการจัดส่งปัจจุบันในส่วนนี้

ฉันมีสิ่งนี้ใน view / adminhtml / templates / order / view / custom_fields.phtml:

$orderId = $this->getRequest()->getParam('order_id');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $order = $objectManager->create('Magento\Sales\Api\Data\OrderInterface')->load($orderId);

$shippingMethod = $order->getShippingDescription();

echo 'Shipping is ' . $order->getShippingMethod();

วิธีนี้ใช้ได้ดี แต่ฉันรู้ว่าไม่ใช่วิธีที่เหมาะสมในการใช้ Object Manager มีใครช่วยฉันใช้อย่างถูกต้องได้ไหม

ขอบคุณสแตน

คำตอบ

2 Nits Sep 28 2020 at 17:44

โปรดทำตามขั้นตอนด้านล่างเพื่อรับวิธีการจัดส่งและรายละเอียดในไฟล์ phtml

app / code / Test / RoomDelivery / view / adminhtml / layout / sales_order_view.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="sales_order_edit">
            <block class="Test\RoomDelivery\Block\Adminhtml\Order\CustomFields" name="order_custom_fields" template="Test_RoomDelivery::order/view/custom_fields.phtml" />
        </referenceBlock>
    </body>
</page>

app / code / Test / RoomDelivery / Block / Adminhtml / Order / CustomFields.php

declare(strict_types=1);

namespace Test\RoomDelivery\Block\Adminhtml\Order;

use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Framework\Registry;
use Magento\Sales\Model\Order; 

/**
 * Class CustomFields
 *
 * @category Block/Order
 * @package  Test\RoomDelivery\Block\Adminhtml\Order
 */
class CustomFields extends Template
{
   
    /**
     * Core registry
     *
     * @var Registry
     */
    protected $coreRegistry = null; /** * CustomFieldsRepositoryInterface * * @var CustomFieldsRepositoryInterface */ protected $customFieldsRepository;

    /**
     * CustomFields constructor.
     *
     * @param Context                         $context Context * @param Registry $registry               Registry
     * @param CustomFieldsRepositoryInterface $customFieldsRepository CustomFieldsRepositoryInterface * @param array $data                   Data
     */
    public function __construct(
        Context $context, Registry $registry,
        array $data = [] ) { $this->coreRegistry = $registry; parent::__construct($context, $data); } /** * Get current order * * @return Order */ public function getOrder() : Order { return $this->coreRegistry->registry('current_order');
    } 
}

app / code / Test / RoomDelivery / view / adminhtml / templates / order / view / custom_fields.phtml

$order = $block->getOrder();
$orderDetails = $order->getId();
echo 'details ' . $orderDetails . '<br />'; echo $order->getShippingDescription();

โปรดแจ้งให้เราทราบหากคุณประสบปัญหาใด ๆ

ฉันหวังว่านี่จะช่วยคุณได้