>我创建了一个自定义模块,当它被调用时,我想做一个观察器来扩展功能。假设我的控制器是:-
<?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)最后但不是租约,请确保您的文件权限正确。:)如有任何问题,请告诉我。