Magento 调度自定义事件不起作用
Posted
技术标签:
【中文标题】Magento 调度自定义事件不起作用【英文标题】:Magento dispatch custom event not working 【发布时间】:2015-09-04 02:53:12 【问题描述】:我从this 站点尝试了相同的代码。
它运行良好,但观察者的代码似乎不起作用。
我的意思是在观察者方法中我已经回显了一些文本并且也使用了exit()
。但控制不去那里。我尝试了很多调试,但无法得到解决方案。
提前致谢。
这是我的模块目录结构的屏幕截图。
app/etc/MyCompanyName_HelloWorld.xml
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<active>true</active>
<codePool>local</codePool>
</MyCompanyName_HelloWorld>
</modules>
</config>
现在是我的模块文件
config.xml
<?xml version="1.0"?>
<config>
<modules>
<mycompanyname_helloworld>
<version>
0.1.0
</version>
</mycompanyname_helloworld>
</modules>
<frontend>
<routers>
<!-- the <helloworld> tagname appears to be arbitrary, but by
convention is should match the frontName tag below-->
<helloworld>
<use>standard</use>
<args>
<module>MyCompanyName_HelloWorld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
</frontend>
<!--Custom events-->
<global>
<events>
<my_custom_event>
<observers>
<mycompanyname_helloworld_my_custom_event_observer>
<type>singleton</type>
<class>helloworld/observer</class>
<method>my_custom_method</method>
</mycompanyname_helloworld_my_custom_event_observer>
</observers>
</my_custom_event>
</events>
</global>
<!--//Custom events-->
</config>
Observer.php
<?php
/**
* Created by PhpStorm.
* User: pratik
* Date: 9/4/15
* Time: 7:45 AM
*/
class MyCompanyName_HelloWorld_Model_Observer
public function my_custom_method($observer)
$eventName = $observer->getEvent();
echo "Hi i am inside event".$eventName; exit;
IndexController.php
<?php
/**
* Created by PhpStorm.
* User: pratik
* Date: 9/4/15
* Time: 7:32 AM
*/
class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action
public function indexAction()
echo "In index controller";
//Now dispatching event(Sending off the event)
$arrToObservers = array('cid'=>'123');
Mage::dispatchEvent('my_custom_event',$arrToObservers);
////Now dispatching event(Sending off the event)
echo "after dispatch";
我得到的输出(没有 magento 执行我的观察者回显语句)
In index controller --after dispatch
但它应该打印Hi i am inside event
文本也写在观察者中。
【问题讨论】:
您的模块名称应该区分大小写,即MyCompanyName_HelloWorld
,而不是config.xml中的全部小写
app/etc/ XML 文件也应该是app/etc/modules/MyCompanyName_HelloWorld.xml
Robbie sir :) 我从这里跟随了 hello world 模块的一些部分。 ***.com/questions/576908/… 。你不能怀疑艾伦风暴的解决方案!看看那里! :)
我想你会发现他的回答是错字而不是错误。他谈论该文件的第一个例子提到移动到app
,然后触摸etc/modules/YourModule_Example.xml
【参考方案1】:
几个问题:
1) 将您的初始化 xml 文件结构更改为首字母大写。
# File: app/etc/modules/MyCompanyName_HelloWorld.xml
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<active>true</active>
<codePool>local</codePool>
</MyCompanyName_HelloWorld>
</modules>
</config>
2) 您引用 helloworld/observer
作为模型来调用您的自定义事件,但尚未定义 helloworld
模型命名空间。将此添加到您的 config.xml
中的 <global>
块中:
# File: app/code/local/MyCompanyName/HelloWorld/etc/config.xml:
<global>
........Your code ...............
<models>
<helloworld>
<class>MyCompanyName_HelloWorld_Model</class>
</helloworld>
</models>
........Your code ...............
</global>
这样做现在可以按预期运行 (Recoverable Error: Object of class Varien_Event could not be converted to string in /path/to/mage/app/code/local/MyCompanyName/HelloWorld/Model/Observer.php on line 11
)。如果您将观察者方法更改为仅输出 Hello World,它可以正常工作。例如:
# File: app/code/local/MyCompanyName/HelloWorld/Model/Observer.php:
<?php
class MyCompanyName_HelloWorld_Model_Observer
public function my_custom_method($observer)
var_dump('Hello World');
exit;
输出:In index controllerstring(11) "Hello World"
【讨论】:
好吧,我到家后试试看!提前 +1 :)1) Your XML file in app/etc should be app/etc/modules:
伙计,这只是一个拼写错误。我已经在app/etc/modules
中有它。如果你正确地阅读了这个问题,我说:我已经得到了一些扩展工作,除了调度程序。意味着扩展正在工作。如果 xml 文件不在 app/etc/modules 中,扩展根本就不会起作用。
很高兴它成功了,但是你的编辑改变了第一期的观点,很快就会调整以上是关于Magento 调度自定义事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章
webkit iOS 5上的自定义Javascript事件不起作用
自定义模块中的 Magento Layout xml 不起作用
Webkit iOS 5上的自定义Javascript事件不起作用