सहेजें घटना पर्यवेक्षक से उत्पाद प्राप्त करें - Magento 2


10

एक उत्पाद बचाओ घटना के बाद मैं 2 Magento के भीतर उत्पाद का उपयोग करने की कोशिश कर रहा हूँ।

मैंने श्रोता को कॉन्फ़िगर किया है:

controller_action_catalog_product_save_entity_after

xml इस प्रकार दिखता है:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="controller_action_catalog_product_save_entity_after">
        <observer name="wire_products_update" instance="TBS\WireProductsHook\Observer\WireProductsUpdate" />
    </event>
</config>

पर्यवेक्षकों के वर्ग को तब बुलाया जाता है जब कोई उत्पाद सहेजा जाता है, लेकिन मुझे उस उत्पाद का उपयोग करने के तरीके के बारे में कोई जानकारी नहीं मिल रही है जिसे सहेजा गया था। प्रेक्षक वर्ग इस प्रकार है:

<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace TBS\WireProductsHook\Observer;

use Magento\Framework\Event\ObserverInterface;

class WireProductsUpdate implements ObserverInterface {

    public function execute( \Magento\Framework\Event\Observer $observer ) {

        // echos name of event: controller_action_catalog_product_save_entity_after
        echo 'name of event: ' . $observer->getEvent()->getName();

        // tried using the same method as the save class: <magento>/module-catalog/Controller/Adminhtml/Product/Save.php on line 76
        $controller = $observer->getData('controller');

        // Fails: Fatal error: Cannot access protected property ...
        $product = $controller->initializationHelper->initialize($controller->productBuilder->build($controller->getRequest()));

    }

}

भीतर /module-catalog/Controller/Adminhtml/Product/Save.php घटना लाइन 114 पर निकाल दिया जाता है:

$this->_eventManager->dispatch(
    'controller_action_catalog_product_save_entity_after',
    ['controller' => $this]
);

यह नियंत्रक को एक तर्क के रूप में देता है। हालांकि मैं अनिश्चित हूं कि उत्पाद का उपयोग करने के लिए इसका उपयोग कैसे किया जाए।

मैं उत्पादों sku प्राप्त करना चाहते हैं

जवाबों:


25

यदि आप $productobjबैकएंड से उत्पाद को बचाने के बाद चाहते हैं तो आप आसानी से catalog_product_save_afterईवेंट का उपयोग कर सकते हैं ।

मैं मान रहा हूं कि आप पहले से ही जानते हैं कि कैसे एक मॉड्यूल बनाना है M2

इसे events.xmlनीचे के मार्ग में रखें

app\code\YOUR_NAMESPACE\YOURMODULE\etc\adminhtml

<?xml version="1.0"?>
<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="test_name" instance="YOUR_NAMESPACE\YOUR_MODULENAME\Observer\Productsaveafter" />
    </event>
</config>

और अपने Productsaveafter.phpरास्ते के नीचे रख दिया

एप्लिकेशन \ कोड \ YOUR_NAMESPACE \ YOURMODULE \ ऑब्जर्वर \

<?php

namespace YOURNAMESPACE\YOURMODULENAME\Observer;

use Magento\Framework\Event\ObserverInterface;

class Productsaveafter implements ObserverInterface
{    
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $_product = $observer->getProduct();  // you will get product object
        $_sku=$_product->getSku(); // for sku

    }   
}

बिल्कुल सही, यह मिल गया है। क्या मैं पूछ सकता हूं कि मुझे उस घटना के बारे में कैसे पता चलेगा? मैं इसे स्रोत कोड में सूचीबद्ध नहीं देख सकता, इसलिए यह नहीं पता था कि यह अस्तित्व में है।
लड़के की

आप इस लिंक से घटनाओं का संदर्भ पा सकते हैं cyrillschumacher.com/magento2-list-of-all-dispatched-events और magento.stackexchange.com/questions/87738/magento-2-events-list @GuyC
Keyur Shah

मेरे पास वह सूची एक संदर्भ के रूप में थी, लेकिन इसे वहां भी नहीं देख सकता था, इसलिए मैंने इसका उपयोग किया:
लड़के की

1
कृपया ध्यान दें कि यदि आप अपने ईवेंट। Xml फ़ाइल को adminhtml क्षेत्र में रखते हैं, तो आपके पर्यवेक्षक को अन्य क्षेत्रों जैसे REST या SOAP में निष्पादित नहीं किया जाएगा जो वेब
एप का

2
@GuyC अंत में पाया गया कि यह कहाँ से आता है। एक विशिष्ट घटना है जो एक इकाई-विशिष्ट "उपसर्ग" का उपयोग करती है। Magento में, अधिकांश कोर मॉडल आंतरिक चर "_eventPrefix" को फिर से परिभाषित करते हैं, इसलिए कोई विशिष्ट मॉडल के लिए CRUD संचालन का निरीक्षण कर सकता है। किसी मॉडल के लिए उपयोग किए जाने वाले उपसर्ग का निर्धारण करने के लिए, आपको मॉडल स्रोत कोड की जांच करने की आवश्यकता है। इसे देखें: magento.stackexchange.com/questions/184772/…
मेहदी

0

यह काफी पुराना है और मुझे यकीन नहीं है कि अब किसी को परवाह है लेकिन मुझे इसकी तलाश थी:

मुझे यकीन नहीं है कि कब से लेकिन निश्चित रूप से M2.2.x पर है कि घटना अब इस तरह है:

$this->_eventManager->dispatch(
                    'controller_action_catalog_product_save_entity_after',
                    ['controller' => $this, 'product' => $product]
                );

जिसका मतलब है कि यह आपको अब उत्पाद भी दे रहा है।

आपके मामले के लिए आपको यह करना चाहिए था और आपको उत्पाद विशेषताओं को एक सरणी के रूप में मिल सकता था:

$post = $observer->getController();
        $data = $post->getRequest()->getPost();
        $productAsArray = $data['product'];

$ उत्पाद = $ प्रेक्षक-> getData ('उत्पाद'); आप उत्पाद प्राप्त करना चाहिए
shobekhan 10
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.