如何在magento中创建观察者

时间:2015-01-31 08:05:22

标签: php magento zend-framework

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

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

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

3 个答案:

答案 0 :(得分:0)

使用以下命令更新您的控制器:

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

答案 1 :(得分:0)

制作配置条目:

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

现在在你的模型中写下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;
  }
}
?>

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

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

答案 2 :(得分:0)

我可以在以下方面进行修改:

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,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)以下观察者功能的更新:

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

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