[英]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.