An event / observer pattern broken by the _beforeSave () method overrides several Magento classes that extend Mage_Core_Model_Abstract

When trying to implement an observer to catch events 'cataloginventory_stock_item_save_before', I realized that the method _beforeSave()in Mage_CatalogInventory_Model_Stock_Itemoverrides the value Mage_Core_Model_Abstractwithout calling its parent, thereby preventing the sending of ordinary events 'model_save_before'and $this->_eventPrefix.'_save_before'...

In Mage_Core_Model_Abstract:

protected function _beforeSave()
{
    //...
    Mage::dispatchEvent('model_save_before', array('object'=>$this));
    Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
    return $this;
}

In Mage_CatalogInventory_Model_Stock_Item:

protected function _beforeSave()
{
    //...some other stuff, but no parent::_beforeSave()!
    return $this;
}

Although I am new to Magento, it looks strange to me, especially when you look at many other Magento classes that extend Mage_Core_Model_Abstract, override the method _beforeSave(), but call parent::_beforeSave()(differently, as seen in the following examples).

For example, in Mage_Catalog_Model_Product:

protected function _beforeSave()
{
    //...
    parent::_beforeSave();
    //no return in this one!
}

In Mage_Catalog_Model_Product_Compare_Item:

protected function _beforeSave()
{
    parent::_beforeSave();
    //...
    return $this;
}

Or in Mage_Catalog_Model_Abstract:

protected function _beforeSave()
{
    //...
    return parent::_beforeSave();
}

Etc.

Mage_CatalogInventory_Model_Stock_Item _afterSave(), :

Mage_CatalogInventory_Model_Stock_Item:

protected function _afterSave()
{
    parent::_afterSave();
    //...
    return $this;
}

( Magento):
, parent::_beforeSave() Mage_CatalogInventory_Model_Stock_Item?
?

, , 'cataloginventory_stock_item_save_before', - Mage_CatalogInventory_Model_Stock_Item core local parent::_beforeSave(), Mage::dispatchEvent('cataloginventory_stock_item_save_before', ...).
?

( ) Mage_Core_Model_Abstract, , Mage_CatalogInventory_Model_Stock_Item , , _beforeSave() ( , _afterSave ..): Mage_XmlConnect_Model_Application``and Mage_Dataflow_Model_Batch`.
, ...

: , ?

+5
1

, "meringue" , , Mage_Core_Model_Abstract ...

  • * _ load_before
  • * _ load_after
  • * _ delete_before
  • * _ delete_after
  • * _ delete_commit_after
  • * _ save_before
  • * _ save_after
  • * _ save_commit_after

... .

- ( ) - _eventPrefix . , .

Mage_CatalogInventory_Model_Stock_Item::_beforeSave() . 1.3.2.4 ( model_save_before). 1.4.0.0-alpha2 version _eventPrefix, _beforeSave() .

, , , cataloginventory stock_item , .

+4

All Articles