我错误地使用Magento的观察者模式?

时间:2012-01-26 11:40:04

标签: magento magento-1.5 observer-pattern

我阅读了很多关于Magento自定义模块创建的文档。

对于我的第一次尝试,我使用Module Creator创建了模块结构,这是我在/app/code/local/Test/MyModule/etc/config.xml中添加的代码:

<?xml version="1.0"?>
<config>
    <modules>
        <Test_MyModule>
            <version>0.1.0</version>
        </Test_MyModule>
    </modules>
    <!-- frontend, admin, adminhtml -->
    <global>
        <!-- models, resources, blocks, helpers -->
        <events>
          <sales_order_place_before> <!-- event i need to catch -->
            <observers>
              <trigger_mymodule_placeorder> 
                <type>model</type>
                <class>test/mymodule/model_observer</class>
                <method>sendOrder</method>
              </trigger_mymodule_placeorder>
            </observers>
          </sales_order_place_before>
        </events>
    </global>
</config> 

我的/app/etc/modules/Test_MyModule.xml文件:

<?xml version="1.0"?>
<config>
    <modules>
        <Test_MyModule>
            <active>true</active>
            <codePool>local</codePool>
        </Test_MyModule>
    </modules>
</config> 

这是我的/app/code/local/Test/MyModule/Model/Observer.php

<?php
class Test_MyModule_Model_Observer
{
    public function sendOrder()
    {
        // do something.
    }
}

..但是从不触发Test_MyModule_Model_Observer :: sendOrder()函数(我尝试在其中放入一个虚拟数据库记录器,以查看函数是否/何时执行)。

我知道模块本身是正确加载的,因为在模块的config.xml中,它在主菜单中声明了一个新链接并且链接得到正确显示(刷新magento的缓存后),所以我猜问题是函数命名我在某处失踪的惯例..但在哪里?

1 个答案:

答案 0 :(得分:3)

我有两个问题,我可以看到,这两个问题都是相关的。您正在使用Mage :: getModel接受的语法指定要使用的类,但您在语法中略有错误,b。)似乎并未实际声明模型的包含位置(除非您将其取出以便更简洁)。

您需要将模型添加到全局节点中。

<models>
   <testmodule>
       <class>Test_MyModule_Model</class>
   </testmodule>
<models>

testmodule部件可以是您喜欢的任何部件,只要它对您的模块而言是独一无二的。然后,观察者部分中使用的类值将变为......

<class>testmodule/observer</class>