Magento 2 - Using Object Manager
-
14-04-2021 - |
Question
I have a module that places some shipping information into the order view of the admin. I am trying to display the current shipping method in this section.
I have this in 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();
This works fine but I know it isn't the proper way to use Object Manager. Can someone help me use this properly?
Thanks, Stan
La solution
Please follow the below steps to get the shipping method and its details in phtml file.
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();
Please let me know if you are facing any issue.
I hope this will help you.