Magento 2: Как получить текущий продукт в Observer?
Версия Magento: 2.0.2
ProductObserver.php
<?php
namespace Demo\Product\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class ProductObserver implements ObserverInterface
{
public function execute(Observer $observer)
{
/* @var $product \Magento\Catalog\Model\Product */
$product = $observer->getEvent()->getProduct();
if(!$product) {
$product = 888;
}
$data = array(
'product' => $product,
'value' => 333
);
$myfile = fopen("/file_path/Observer.txt", "w");
fwrite($myfile, print_r($data, true));
fclose($myfile);
}
}
Events.xml
<?xml version="1.0"?>
<!--
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="catalog_product_save_after">
<observer name="owner_product_observer" instance="DianziBuy\Product\Observer\OwnerProductObserver" />
</event>
</config>
Это мой пользовательский код наблюдателя и настройка событий выше. когда я нажимаю кнопку сохранить продукт, данные о продукте не записываются в файл и получается пустая страница. Итак, что не так с моим кодом?
2
Author: Mike Zhang, 2016-03-11
1 answers
Вы делаете это правильно.
Единственная проблема заключается в том, что вы пытаетесь записать в файл что-то слишком большое.
$product = $observer->getEvent()->getProduct();
возвращает экземпляр сохраняемого продукта, который содержит много информации.
Попробуйте ограничить печать этим
$product = $observer->getEvent()->getProduct();
$data = array(
'product' => $product->getId(), //or $product->getName()
'value' => 333
);
5
Author: Marius, 2016-03-11 07:08:09