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

标签 php magento events design-patterns observers

我尝试了 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执行我的观察者 echo 语句)

在索引 Controller 中——调度后

但它应该打印 Hi i am inside event 文本,也是用观察者编写的。

enter image description here

最佳答案

几个问题:

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> block :

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

关于php - Magento 调度自定义事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32389354/

相关文章:

python - 如何滚动不活动的 Tkinter 列表框?

php - 从 MySQL 检索 PHP 记录的日期格式

php - 具有不同结构和布局的页面模块?

php - 使用引用创建变量是个好主意吗?

php - Magento 如何检查管理员是否登录(前端)

magento - Magento 安装中出现重复的 PHP 文件?

javascript - 动态创建的元素上的事件绑定(bind)?

php - 如何在没有jquery或javascript的情况下在php mysql中编辑、删除和添加?

magento - 如何在 Magento 中添加管理员用户属性

javascript - 按钮单击事件在页面重新加载时触发