[英]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
}
}
進行配置條目:
<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);
..
?>
我可以在以下幾個方面進行修改:
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)最后但不是租約,請確保您的文件權限正確。 :)如果有任何問題,請通知我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.