我在管理面板中创建了一个自定义模块。我希望在将表单数据保存到表之前使用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('*/*/');
}
任何人都可以帮助找到问题。 提前谢谢。
答案 0 :(得分:1)
在您正在观察的自定义模型中,请确保覆盖该属性:
protected $_eventPrefix = 'demo';
Dispatch事件正在进行:
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
如果没有设置就行不通。
还有一个问题是你覆盖了_beforeSave并且没有调用
parent::_beforeSave()
在里面。