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.

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.