简体   繁体   中英

Observer event is not working before save in custom module magento

I have created a custom module in admin panel. I want to use observer to perform a small concat operation before i save form data into table.. But before save , it is working perfectly.

My config.xml file:

        <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> 

My model File: 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"));

    }

    }

My dispatcher code in controller:

      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('*/*/');
} 

Can anyone help to find the issue. Thanks in advance.

In the custom Model that you are observing make sure you overwritten the property:

protected $_eventPrefix = 'demo';

Dispatch event is doing:

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

And if that's not set is not going to work.

Also there may be the problem that you overwritten _beforeSave and didn't call

parent::_beforeSave() 

inside it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM