Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Magento分派自定义事件不工作_Php_Magento_Events_Design Patterns_Observers - Fatal编程技术网

Php Magento分派自定义事件不工作

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

我在网站上尝试了相同的代码

它工作得很好,但observer的代码似乎不起作用

我的意思是在observer方法中,我重复了一些文本并使用了
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;
    }
}