イベントをキャッチするためにオブザーバーを実装しようとすると、メソッド in がその親を呼び出さずにメソッドをオーバーライドするため、システムが通常のイベントとイベントをディスパッチできない'cataloginventory_stock_item_save_before'
ことに気付きました..._beforeSave()
Mage_CatalogInventory_Model_Stock_Item
Mage_Core_Model_Abstract
'model_save_before'
$this->_eventPrefix.'_save_before'
で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;
}
でMage_CatalogInventory_Model_Stock_Item
:
protected function _beforeSave()
{
//...some other stuff, but no parent::_beforeSave()!
return $this;
}
私は Magento に非常に慣れていませんが、これは私には奇妙に見えます。特に、メソッドを拡張し、メソッドをMage_Core_Model_Abstract
オーバーライドするが呼び出しを行う他の多くの Magento クラスを見ると(次の例に示すように、さまざまな方法で)。_beforeSave()
parent::_beforeSave()
たとえば、Mage_Catalog_Model_Product
次のようになります。
protected function _beforeSave()
{
//...
parent::_beforeSave();
//no return in this one!
}
でMage_Catalog_Model_Product_Compare_Item
:
protected function _beforeSave()
{
parent::_beforeSave();
//...
return $this;
}
またはでMage_Catalog_Model_Abstract
:
protected function _beforeSave()
{
//...
return parent::_beforeSave();
}
等。
さらに奇妙なことに、Mage_CatalogInventory_Model_Stock_Item
もオーバーライドしますが_afterSave()
、今回は親のメソッドを呼び出します。
でMage_CatalogInventory_Model_Stock_Item
:
protected function _afterSave()
{
parent::_afterSave();
//...
return $this;
}
私の質問は(そこにいるMagentoの達人を対象としています):このin
の省略に正当な理由があるかどうかを理解していますか?
それともバグとしてリストする必要がありますか?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', ...)
の他の多くの直系の子孫を(好奇心で)検索したところ、少なくともメソッドに関する限り、他の2つのサブクラスだけが同じ問題を共有してMage_Core_Model_Abstract
いることがわかりました(他の基本的なイベントはチェックしていません)など): Mage_Dataflow_Model_Batch`.
このことから、たった 3 つのクラスでのこの省略は、意図的に行われたのではない可能性があると思います...Mage_CatalogInventory_Model_Stock_Item
_beforeSave()
_afterSave
Mage_XmlConnect_Model_Application``and
だから:それはバグですか、それとも間違っていますか?