Magento 通过Varien_事件_观察者访问模型

Magento 通过Varien_事件_观察者访问模型,magento,Magento,我在Magento 1.6.2.0中有一个自定义观察者,在保存或删除CMS页面时调用它(事件CMS\u page\u delete\u before/CMS\u page\u save\u before)。我已经验证(使用Mage::log())观测者正在工作,但是当我尝试以下操作时: public function getCmsUrl(Varien_Event_Observer $observer) { $url = $observer->getEvent()->getPa

我在Magento 1.6.2.0中有一个自定义观察者,在保存或删除CMS页面时调用它(事件CMS\u page\u delete\u before/CMS\u page\u save\u before)。我已经验证(使用Mage::log())观测者正在工作,但是当我尝试以下操作时:

public function getCmsUrl(Varien_Event_Observer $observer)
{
    $url = $observer->getEvent()->getPage()->getIdentifier();
    return $url;
}
我没有得到任何返回(而不是“关于我们”或“启用cookies”或CMS页面的任何URL路径)。但是,以下代码工作得非常好:

public function getProductUrl(Varien_Event_Observer $observer)
{
    $baseUrl = $observer->getEvent()->getProduct()->getBaseUrl();
    return $baseUrl;
}
有人能告诉我当通过观察者时访问CMS页面的正确方式是什么吗


提前感谢您的帮助/提示/提示:-)

事件
cms\u page\u delete\u before
cms\u page\u save\u before
Mage\u Core\u Model\u Abstract
中启动。这是它在
beforeSave
功能中的外观:

Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
如您所见,它使用变量
\u eventPrefix
来构造事件键。在CMS页面模型中,这被设置为
CMS\u页面

还要注意部分
$this->\u getEventData()
。这就是模型(在本例中为CMS页面)传递给观察者的方式:

protected function _getEventData()
{
    return array(
        'data_object'       => $this,
        $this->_eventObject => $this,
    );
}
如您所见,对象有两个名称,
data\u object
和一个在变量中定义的名称,
\u eventObject
。在产品模型中,名称设置为
product
,但在CMS页面模型中,变量缺失。显然,Magento团队忘记将其放入,因此,使用了core模型中的默认名称:

protected $_eventObject = 'object';
这意味着您可以通过使用
getObject
,在observer中获取CMS页面:

public function myObserver(Varien_Event_Observer $observer)
{
    $page = $observer->getEvent()->getObject();
}

谢谢你的帮助!从那以后,我学会了在其他活动中运用你的技巧。我还发现get_uclass_umethods()也帮助我解决了发生的事情。