danh mục sự kiện magento 2ininoryory_stock_item_save_after


7

Tôi cần phát hiện bất cứ khi nào mức tồn kho của sản phẩm thay đổi. Vì có cataloginventory_stock_item_save_after trong magento 1.x muốn có nghĩa tương tự trong magento 2.1

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

Sau đó, người tạo quan sát "Cataloginventorysave.php" mà tôi muốn truy cập

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

Nhưng tên sự kiện cataloginventory_stock_item_save_afterkhông được tìm thấy trong danh sách sự kiện magento 2. Làm thế nào tôi sẽ đạt được nó.

Câu trả lời:


8

Đây là một lỗi.

Về cơ bản những sự kiện được cử động ở Magento\Framework\Model\AbstractModeltrong afterSave()phương pháp:

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;
}

Như bạn có thể thấy, mã này sử dụng $this->_eventPrefixđể tạo tên của sự kiện.

Nhưng vấn đề với Magento\CatalogInventory\Model\Stock\Itemlà biến này không được khai báo đúng :

protected $eventPrefix = 'cataloginventory_stock_item';

Thấy vấn đề? Nó thiếu một dấu gạch dưới, nên là:

protected $_eventPrefix = 'cataloginventory_stock_item';

Tôi đề nghị bạn tạo một báo cáo lỗi ở đây để nhóm biết về nó: https://github.com/magento/magento2/issues

Sau khi đào nó, có vẻ như ai đó đã tìm thấy lỗi trước chúng tôi: https://github.com/magento/magento2/issues/4857

Xin lưu ý rằng PR đã được sáp nhập vào developchi nhánh


cảm ơn bạn. nó hoạt động .. nhưng bây giờ tôi muốn id sản phẩm nên tôi đã thử: $ stockItem = $ observer-> getEvent () -> getItem ();
SPK

1
$ id = $ stockItem-> get SẢNtId (); Tôi đã gặp lỗi: PHP Lỗi nghiêm trọng: Gọi tới hàm thành viên get SẢNtId () trên null
SPK

@SPK Nó yêu cầu sửa lỗi tên thuộc tính $ _eventObject. Nếu không sửa lỗi này, sự kiện luôn chuyển dữ liệu sự kiện dưới dạng 'Đối tượng' thay vì 'Cổ phiếu' và 'Mục' dự kiến.
Geethika Antony

sự kiện đó được gửi bởi một đơn đặt hàng hoặc api?
Antonio Peesini

Trong trường hợp này, mọi ý tưởng làm thế nào để có được qty trước đó trong Magento 1 getOrigData('qty')đều có thể được sử dụng cho nó. Nhưng nó không hoạt động trong 2.
Geethika Antony
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.