Как получить информацию о клиенте в Magento 2
-
13-12-2019 - |
Вопрос
В моем пользовательском модуле я пытаюсь получить 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));