繁体   English   中英

Magento 调度自定义事件不起作用

[英]Magento dispatch custom event not working

我从这个站点尝试了相同的代码。

它运行良好,但观察者的代码似乎不起作用。

我的意思是在观察者方法中,我回显了一些文本并使用了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 执行我的观察者 echo 语句)

In index controller --after dispatch

但它应该打印Hi i am inside event文本中太用观察者写了。

在此处输入图片说明

几个问题:

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模型命名空间。 将此添加到<global>块中的config.xml中:

# 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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM