Заказ и информация о продукте в Magento 2
-
13-12-2019 - |
Вопрос
в Magento 1 просто я могу получить информацию о заказе, используя Mage::getModel()
, а также продукт, а то же самое правильно?
$order_information = Mage::getModel('sales/order')->load($order_id);
.
как хорошо
$product_information = Mage::getModel('catalog/product')->load($product_id)
.
в Magento 2 Я выпустил ниже код, но он не работает, сайт висит.
Order event
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">
<event name="sales_order_save_after">
<observer name="custom_event" instance="Learning\Custom\Model\Observer" method="getOrder" />
</event>
</config>
.
Product event
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">
<event name="catalog_product_save_commit_after">
<observer name="custom_event" instance="Learning\Custom\Model\Observer" method="getProduct" />
</event>
</config>
.
Код наблюдателя из <Сильные> Учебные \ Custom \ Model \ Observer.php Файл
<?php
namespace Learning\Custom\Model;
class Observer{
protected $orderFactory;
protected $productFactory;
public function __construct( \Magento\Sales\Model\OrderFactory $orderFactory,\Magento\Catalog\Model\ProductFactory $productFactory)
{
$this->orderFactory = $orderFactory;
$this->productFactory = $productFactory;
}
/**
* Get the Order Information
*
* @param \Magento\Framework\Event\Observer $observer
*/
public function getOrder(\Magento\Framework\Event\Observer $observer)
{
/* this 4 lines of code working fine */
$event = $observer->getEvent();
$order = $event->getOrder();
$order_id = $order->getIncrementId();
file_put_contents('Order ID.txt',print_r($order_id,true));
/* when this 3 lines of code executing website is hanging */
$order_factory = $this->orderFactory->create();
$order_information = $order_factory->loadByIncrementId($order_id);
file_put_contents('Order.txt',print_r($order_information,true));
/* when this line of code executing website is hanging */
file_put_contents('Order Information.txt',\Zend_Debug::dump($order->getData(), $label = null, $echo = true));
}
/**
* Get the Product Information
*
* @param \Magento\Framework\Event\Observer $observer
*/
public function getProduct(\Magento\Framework\Event\Observer $observer)
{
/* this 2 lines of code working fine */
$product_id = $observer->getProduct()->getId();
file_put_contents('Product ID.txt',print_r($product_id,true));
/* when this 3 lines of code executing website is hanging */
$product_information = $this->productFactory->create();
$prod = $product_information->load($product_id);
file_put_contents('Product.txt',print_r($prod,true));
}
}
.
Пожалуйста, дайте мне знать, где я ошибся?или любые предложения?
Решение
Проверьте следующий код.Следует заменить следующий код в ваш класс наблюдателя.Найти /varlog/system.log файл для журнала
namespace Learning\Custom\Model; use Psr\Log\LoggerInterface as Logger; class Observer { /** * Logger. * * @var Logger */ protected $logger; public function __construct( Logger $logger ) { $this->logger = $logger; } public function getOrder(\Magento\Framework\Event\Observer $observer) { $order = $observer->getOrder(); $order_id = $order->getIncrementId(); $this->logger->info($order_id); $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $order = $objectManager->get('Magento\Sales\Model\Order'); $order_information = $order->loadByIncrementId($order_id); $this->logger->info('Order Info', $order_information->getData()); } public function getProduct(\Magento\Framework\Event\Observer $observer) { $product_id = $observer->getProduct()->getId(); $this->logger->info($product_id); $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $product = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id); $this->logger->info('Product Info', $product->getData()); } }.
Не связан с magento.stackexchange