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 中的 &lt;global&gt; 块中:

# 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 不起作用

Magento 2:自定义属性不起作用

Webkit iOS 5上的自定义Javascript事件不起作用

使用我的自定义 UserDetailsS​​ervice 后,httpsession 生命周期事件不起作用

材料ui的自定义输入中的Redux表单不起作用