如何在洋红色中创建观察点


How to create an observer in magento

>我创建了一个自定义模块,当它被调用时,我想做一个观察器来扩展功能。假设我的控制器是:-

  <?php
    class Test_Mod_IndexController extends Mage_Core_Controller_Front_Action
    {
        public function saveAction()
     {
          // code 
   $dataval =  $this->getRequest()->getParams();
    Mage::dispatchEvent('my_custom_event', $dataval);
      }
    }

这是配置文件:-

<?xml version="1.0"?>
<config>
  <modules>
    <Myobs_Obser>
      <version>0.1.0</version>
    </Myobs_Obser>
  </modules>
    <global>
        <models>
            <obser>
            <class>Myobs_Obser_Model</class>
            </obser>
        </models>
    </global>
 <frontend>
    <events>
        <my_custom_event>
            <observers>
                <Myobs_Obser_my_custom_event_observer>
                    <type>singleton</type>
                    <class>obser/observer</class>
                    <method>my_custom_method</method>
                </Myobs_Obser_my_custom_event_observer>
            </observers>
        </my_custom_event>
    </events>
</frontend>
</config> 

这是观察者:-

<?php
class Myobs_Obser_Model_Observer
{
 public function my_custom_method($observer)
    {       
        $event = $observer->getEvent();  
                        var_dump($event);
        die;
       }
 }
?>

它不起作用,请帮助我。谢谢。

使用以下方法更新控制器:

<?php
class Test_Mod_IndexController extends Mage_Core_Controller_Front_Action
{
    public function saveAction()
 {
    //creating your own dispatch event
Mage::dispatchEvent(
            'mod_submit_before',
            array('key' => 'value')//parameters to access using observer object in event function parameter
        );
      // code 
  }
}

Make Config 条目:

<global>
  ..
  ..
  <events>
    <my_custom_event>
      <observers>
        <namespace_modulename_my_custom_event_observer>
          <type>singleton</type>
          <class>modulename/observer</class>
          <method>my_custom_method</method>
        </namespace_modulename_my_custom_event_observer>
      </observers>
    </my_custom_event>
  </events>
  ..
  ..
</global>

现在在模型中编写观察器.php:

<?php
class Namespace_Modulename_Model_Observer
{
  public function my_custom_method($observer) {
    $event = $observer->getEvent();
    // getter method to fetch cid value passed from the dispatcher
    $cid = $event->getCid();
    echo $cid;
    exit;
  }
}
?>

现在在控制器中调用自定义事件:

<?php
..
$event_data_array  =  array('cid' => '123');
Mage::dispatchEvent('my_custom_event', $event_data_array);
..
?>

在以下方面,我需要修改:

1) Updated Function : 
    <?php
        class Test_Mod_IndexController extends Mage_Core_Controller_Front_Action
        {
            public function saveAction()
         {
              // code 
       $dataval =  $this->getRequest()->getParams();
// I have changed the 2nd parameter below as a key value pair, you can access the data using reference key "formdata" in your observer function
        Mage::dispatchEvent('my_custom_event', array('formdata' => $dataval));
          }
        }

2)你在Config.xml,事件节点应该在里面,下面是你更新的配置.xml

<?xml version="1.0"?>
<config>
  <modules>
    <Myobs_Obser>
      <version>0.1.0</version>
    </Myobs_Obser>
  </modules>
    <global>
        <models>
            <obser>
            <class>Myobs_Obser_Model</class>
            </obser>
        </models>
        <events>
        <my_custom_event>
            <observers>
                <obser>
                    <type>model</type>
                    <class>obser/observer</class>
                    <method>mycustommethod</method><!--Avoiding Undescores in methode name-->
                </obser>
            </observers>
        </my_custom_event>
    </events>
    </global>
</config> 

3)以及下面观察器函数的更新:

<?php
class Myobs_Obser_Model_Observer
{
 public function mycustommethod($observer)
    {       
        $event = $observer->getEvent();  
                        var_dump($event);
        die;
       }
 }
?>

4)最后但不是租约,请确保您的文件权限正确。:)如有任何问题,请告诉我。