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>

Это мой пользовательский код наблюдателя и настройка событий выше. когда я нажимаю кнопку сохранить продукт, данные о продукте не записываются в файл и получается пустая страница. Итак, что не так с моим кодом?

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