简体   繁体   English

如何在magento中创建观察者

[英]How to create an observer in magento

I have created a custom module and when it's controller called i want to make an observer to extend functionality. 我创建了一个自定义模块,当它的控制器称为“我想让观察者扩展功能”时。 suppose my controller is :- 假设我的控制器是:

  <?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);
      }
    }

Here is config file:- 这是配置文件:-

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

Here is observer :- 这是观察者:-

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

It's not working please help me. 它不起作用,请帮助我。 Thanks. 谢谢。

Update your controller with following : 使用以下命令更新您的控制器:

<?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 entry: 进行配置条目:

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

Now write observer.php inside your model: 现在在模型中编写observer.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;
  }
}
?>

Now call your custom event inside your controller: 现在在控制器中调用自定义事件:

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

There are following areas where I can you need modifications : 我可以在以下几个方面进行修改:

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) Your in Config.xml, events node should come inside , below is your updated config.xml 2)您在Config.xml中的events节点应该在其中,下面是您更新的config.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) And updates in your observer function below : 3)并在以下观察者函数中进行更新:

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

4) last but not the lease, make sure your file permissions are proper. 4)最后但不是租约,请确保您的文件权限正确。 :) let me know in case any issues. :)如果有任何问题,请通知我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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