koj*_*iro 4 php events magento
app/code/core/Customer/etc/config.xml 在Magento保存地址之前和之后注册观察员:
<events>
<customer_address_save_before>
<observers>
<customer_address_before_save_viv_observer>
<class>customer/observer</class>
<method>beforeAddressSave</method>
</customer_address_before_save_viv_observer>
</observers>
</customer_address_save_before>
<customer_address_save_after>
<observers>
<customer_addres_after_save_viv_observer>
<class>customer/observer</class>
<method>afterAddressSave</method>
</customer_addres_after_save_viv_observer>
</observers>
</customer_address_save_after>
</events>
Run Code Online (Sandbox Code Playgroud)
......但我找不到任何证据证明Magento实际上在任何地方派遣了这些事件:
$ grep -RF 'dispatchEvent(' . | grep -F customer_addres
./app/code/core/Mage/Customer/Model/Address/Abstract.php: Mage::dispatchEvent('customer_address_format', array('type' => $formatType, 'address' => $this));
Run Code Online (Sandbox Code Playgroud)
据我所知Mage::dispatchEvent(…),Magento解雇事件的唯一方法.这些事件真的发生了吗?(我希望如此,因为我真的可以使用一些在地址上发射的事件来节省时间.)
Mol*_*iel 13
是的,它发送,但有些事件很难找到调度的地方,因为magento动态地执行此操作.几乎所有核心模型都会在保存时发生这种情况 Magento发送这样的事件:
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
Run Code Online (Sandbox Code Playgroud)
所以grep将无法找到发送此事件的位置.
例如,模型"Mage_Customer_Model_Address"扩展了类"Mage_Customer_Model_Address_Abstract",该类已经设置了$_eventPrefix = 'customer_address'调度事件的_beforeSave()和_afterSave()方法中的Mage_Core_Model_Abstract.