Вопрос

в 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 Обучение / Custom / etc / events.xml

<?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 Обучение / Custom / etc / adminhtml / events.xml

<?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());

    }
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top