Вопрос

В моем пользовательском модуле я пытаюсь получить Customer, Customer Address, Product и Order информация через events/observers но это не работает.Когда меня ударили Кнопка «Сохранить» сайт висит.

мой код:

Обучение/Пользовательский/etc/frontend/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="customer_save_after">
        <observer name="custom_event" instance="Learning\Custom\Model\Observer" method="getCustomer" />
    </event>
    <event name="customer_address_save_commit_after">
        <observer name="custom_event" instance="Learning\Custom\Model\Observer" method="getCustomerAddress" />
    </event>
    <event name="sales_order_save_after">
        <observer name="custom_event" instance="Learning\Custom\Model\Observer" method="getOrder" />
    </event>
</config>

Обучение/Пользовательский/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>

Обучение\Пользовательский\Модель\Observer.php

<?php

namespace Learning\Custom\Model;

class Observer{

    /**
     * Get the Customer Information
     *
     * @param \Magento\Framework\Event\Observer $observer
     */
    public function getCustomer(\Magento\Framework\Event\Observer $observer)
    {
       /* $customer = $observer->getCustomer();*/

        $event = $observer->getEvent();
        $customer = $event->getCustomer();

        file_put_contents('customer.txt',print_r($customer,true));
    }

    /**
     * Get the Customer Address Information
     *
     * @param \Magento\Framework\Event\Observer $observer
     */
    public function getCustomerAddress(\Magento\Framework\Event\Observer $observer)
    {
        /*$customerAddress = $observer->getCustomerAddress();
        $customer = $customerAddress->getCustomer();*/

        $event = $observer->getEvent();
        $customerAddress = $event->getCustomerAddress();
        $customer = $customerAddress->getCustomer();

        file_put_contents('customerAddress.txt',print_r($customerAddress,true));
        file_put_contents('customer.txt',print_r($customer,true));
    }

    /**
     * Get the Order Information
     *
     * @param \Magento\Framework\Event\Observer $observer
     */
    public function getOrder(\Magento\Framework\Event\Observer $observer)
    {

       /* $order = $observer->getOrder();*/

        $event = $observer->getEvent();
        $order = $event->getOrder();

        file_put_contents('order.txt',print_r($order,true));
    }

    /**
     * Get the Product Information
     *
     * @param \Magento\Framework\Event\Observer $observer
     */
    public function getProduct(\Magento\Framework\Event\Observer $observer)
    {

        /* $product_id = $observer->getProduct()->getId();*/

        $event = $observer->getEvent();
        $Product = $event->getProduct();

        file_put_contents('Product.txt',print_r($Product,true));
    }


}

Какие-либо предложения?

Это было полезно?

Решение

у вас есть tried to put object to file и это действительно плохая идея ..по этой причине возникают проблемы..

Всякий раз, когда вы пытались распечатать объект в файл и это был доступ, возьми много оперативной памяти эта машина зависла.

Мое предложение получить данные из объекта и поместить это значение в массив, распечатать этот массив в текстовом файле

Предположим, что sales_order_save_after

Если вы хотите получить данные, используйте получить данные() для получения в формате массива.

$event = $observer->getEvent();
  $order = $event->getOrder();

 //Zend_Debug::dump($order->getData(), $label = null, $echo = true);
 file_put_contents('order.txt',\Zend_Debug::dump($order->getData(), $label = null, $echo = true));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top