magento 2 event cataloginventory_stock_item_save_after

7

Ich muss erkennen, wann sich der Lagerbestand eines Produkts ändert. Da es in magento 1.x cataloginventory_stock_item_save_after gibt, möchten wir dasselbe in magento 2.1 implementieren

<event name="cataloginventory_stock_item_save_after">
    <observer name="cataloginventorysave" instance="Vendor\Module\Observer\Cataloginventorysave" />
</event>

Dann erstellte Beobachter "Cataloginventorysave.php", auf den ich zugreifen möchte

$stockItem = $observer->getEvent()->getItem();

Der Ereignisname cataloginventory_stock_item_save_afterwird jedoch nicht in der Magento 2-Ereignisliste gefunden. Wie werde ich es erreichen.

SPK
quelle

Antworten:

8

Dies ist ein Fehler.

Grundsätzlich werden diese Ereignisse Magento\Framework\Model\AbstractModelin der afterSave()Methode dynamisch ausgelöst:

public function afterSave()
{
    $this->cleanModelCache();
    $this->_eventManager->dispatch('model_save_after', ['object' => $this]);
    $this->_eventManager->dispatch('clean_cache_by_tags', ['object' => $this]);
    $this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());
    $this->updateStoredData();
    return $this;
}

Wie Sie sehen können, wird mit diesem Code $this->_eventPrefixder Name des Ereignisses generiert.

Aber das Problem mit Magento\CatalogInventory\Model\Stock\Itemist , dass diese Variable deklariert ist nicht richtig :

protected $eventPrefix = 'cataloginventory_stock_item';

Sehen Sie das Problem? Es fehlt ein Unterstrich, es sollte sein:

protected $_eventPrefix = 'cataloginventory_stock_item';

Ich schlage vor, dass Sie hier einen Fehlerbericht erstellen, damit das Team davon Kenntnis hat: https://github.com/magento/magento2/issues

Nach dem Ausgraben scheint jemand den Fehler vor uns gefunden zu haben: https://github.com/magento/magento2/issues/4857

Bitte beachten Sie, dass die PR bereits in der developFiliale zusammengeführt wurde

Raphael beim digitalen Pianismus
quelle
Vielen Dank. es hat funktioniert .. aber jetzt möchte ich die Produkt-ID, also habe ich versucht: $ stockItem = $ Observer-> getEvent () -> getItem ();
SPK
1
$ id = $ stockItem-> getProductId (); Ich habe Fehler erhalten: PHP Schwerwiegender Fehler: Aufruf einer Mitgliedsfunktion getProductId () auf null
SPK
@SPK Es ist eine Korrektur des Attributnamens $ _eventObject erforderlich. Ohne diesen Fix übergibt das Ereignis die Ereignisdaten immer als "Objekt" anstelle des erwarteten "Bestands" und "Artikels".
Geethika Antony
Wird dieses Ereignis durch eine Bestellung oder eine API ausgelöst?
Antonio Pedicini
In diesem Fall kann jede Idee verwendet werden, wie die vorherige Menge in Magento 1 abgerufen getOrigData('qty')werden kann. Aber es funktioniert nicht in 2.
Geethika Antony