在自定义模块magento中保存之前,Observer事件不起作用

时间:2015-08-11 08:47:53

标签: php xml magento

我在管理面板中创建了一个自定义模块。我希望在将表单数据保存到表之前使用observer执行小的concat操作。但在保存之前,它工作正常。

我的config.xml文件:

        <events> 
     <demo_save_before>
        <observers>
            <blazedream_demo_save_observer>
               <type>singleton</type>
               <class>demo/observer</class>
               <method>demo_save_before</method>
            </blazedream_demo_save_observer>
        </observers>
    </demo_save_before>
    </events> 

我的模型文件:Observer.php

    <?php
   class Blazedream_Demo_Model_Observer 
   {
     public function demo_save_before($observer){
     $demo = $observer->getEvent();     
     $demo->setContent(Mage::app()->getRequest()->getPost("title")." ".Mage::app()->getRequest()->getPost("content"));

    }

    }

我在控制器中的调度程序代码:

      public function saveAction()
{
$event_data_array  =  array('content' => Mage::app()->getRequest()->getParam('content'));
    $varien_object = new Varien_Object($event_data_array);
    Mage::dispatchEvent('demo_save_before', array('varien_obj'=>$varien_object));
    //echo $varien_object->getDemo_id();
$date = date('Y-m-d H:i:s');  
if ( $this->getRequest()->getPost() ) {
try {
$postData = $this->getRequest()->getPost();
$demoModel = Mage::getModel('demo/demo');
$demoModel->setId($this->getRequest()->getParam('id'))
->setTitle($postData['title'])
->setContent($postData['content'])
->setStatus($postData['status'])
->setCreated_time($date)
->setUpdate_time($date)
->save();
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully saved'));
Mage::getSingleton('adminhtml/session')->setDemoData(false);
$this->_redirect('*/*/');
return;
} catch (Exception $e) {
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
Mage::getSingleton('adminhtml/session')->setDemoData($this->getRequest()->getPost());
$this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
return;
}
}
$this->_redirect('*/*/');
} 

任何人都可以帮助找到问题。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

在您正在观察的自定义模型中,请确保覆盖该属性:

protected $_eventPrefix = 'demo';

Dispatch事件正在进行:

Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());

如果没有设置就行不通。

还有一个问题是你覆盖了_beforeSave并且没有调用

parent::_beforeSave() 
在里面。