Php Magento分派自定义事件不工作
我在网站上尝试了相同的代码 它工作得很好,但observer的代码似乎不起作用 我的意思是在observer方法中,我重复了一些文本并使用了Php Magento分派自定义事件不工作,php,magento,events,design-patterns,observers,Php,Magento,Events,Design Patterns,Observers,我在网站上尝试了相同的代码 它工作得很好,但observer的代码似乎不起作用 我的意思是在observer方法中,我重复了一些文本并使用了exit()。但是控制不在那里。我试了很多次调试,但都没有找到解决方案 提前谢谢 这是我的模块目录结构的屏幕截图 app/etc/MyCompanyName\u HelloWorld.xml <?xml version="1.0"?> <config> <modules> <MyCompany
exit()
。但是控制不在那里。我试了很多次调试,但都没有找到解决方案
提前谢谢
这是我的模块目录结构的屏幕截图
app/etc/MyCompanyName\u HelloWorld.xml
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<active>true</active>
<codePool>local</codePool>
</MyCompanyName_HelloWorld>
</modules>
</config>
<?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;
}
}
<?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执行我的observer echo语句)
在索引控制器中--调度后
但它应该打印出“你好,我在里面”事件中的“观察者”文本
有两个问题:
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>
执行此操作后,它现在按预期运行(可恢复错误:Varien_类事件的对象无法转换为第11行的/path/to/mage/app/code/local/MyCompanyName/HelloWorld/Model/Observer.php中的字符串)。如果将observer方法更改为仅输出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;
}
}
#文件:app/code/local/MyCompanyName/HelloWorld/Model/Observer.php:
您的模块名称应该区分大小写,即MyCompanyName\u HelloWorld
而不是config.XML中的所有小写字母。此外,app/etc/XML文件应该是app/etc/modules/MyCompanyName\u HelloWorld.XML
Robbie先生:)我从这里跟随了hello world模块的某些部分。你不能怀疑艾伦·斯托姆的解决方案!!看看那里!:)我想你会发现他的答案是错的,而不是错的。他谈到该文件的第一个例子提到移动到app
,然后触摸etc/modules/YourModule\u example.xml
,好吧,我到家后会试试+1提前:)app/etc中的XML文件应该是app/etc/modules:
Buddy拜托,这只是一个打字错误。我已经在app/etc/modules
中有了它。如果你正确地阅读了这个问题,我会说:除了调度器之外,我已经让部分扩展工作正常了。表示扩展正在工作。如果xml文件不在app/etc/modules中,扩展就根本不起作用。很高兴它起作用了,但您的编辑更改了第一期的要点,很快就会调整
# 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;
}
}