【发布时间】:2011-10-05 20:47:27
【问题描述】:
我正在尝试让一个简单的事件观察器工作,但我不知道在这种情况下是否可能。最后,我想在 Shipworks 推送订单更新时触发一个事件。我认为因为 Shipworks 完全是在他们的 shipworks3.php 脚本中完成的,并且没有调用 Mage::run() 来初始化完整的存储(它使用 Mage::app(''),观察者不依赖于事件......至少这是我的打算在这一点上的理论。但是,我似乎无法让它发挥作用。
下面是我拼凑起来测试的一些示例代码。如果您对此有任何想法,请告诉我
示例
首先,我创建了一个带有观察者和前端控制器的简单模块,用于测试目的:
config.xml
<config>
<modules>
<VPS_Test>
<version>0.1.0</version>
</VPS_Test>
</modules>
<global>
<models>
<vps_test>
<class>VPS_Test_Model</class>
</vps_test>
</models>
</global>
<events>
<test_event_one>
<observers>
<test_event_one>
<type>singleton</type>
<class>VPS_Test_Model_Observer</class>
<method>foo_test_global</method>
</test_event_one>
</observers>
</test_event_one>
</events>
<frontend>
<events>
<test_event_one>
<observers>
<test_event_one>
<type>singleton</type>
<class>VPS_Test_Model_Observer</class>
<method>foo_test_front</method>
</test_event_one>
</observers>
</test_event_one>
</events>
<routers>
<vps_test>
<use>standard</use>
<args>
<module>VPS_Test</module>
<frontName>vpstest</frontName>
</args>
</vps_test>
</routers>
</frontend>
</config>
Observer.php
class VPS_Test_Model_Observer extends Mage_Core_Model_Abstract
{
public function foo_test_front(Varien_Event_Observer $observer)
{
echo "foo_test event caught in observer FRONT";
}
public function foo_test_global(Varien_Event_Observer $observer)
{
echo "foo_test event caught in observer GLOBAL";
}
}
模块配置 XML
<config>
<modules>
<VPS_Test>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Core />
</depends>
</VPS_Test>
</modules>
</config>
接下来,为了测试这一点,我在浏览器中加载了http://my_domain/vpstest,我看到了预期的输出(即,它调度了事件,而我的观察者捕获了它)
然后我在我的站点的根目录中创建了eventtest.php,并从我的浏览器中点击它。在这种情况下,Magento 确实触发了该事件,但我的观察者没有发现它。
eventtest.php
require 'app/Mage.php';
error_reporting(E_ALL | E_STRICT);
ini_set('html_errors', 1);
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
try {
Mage::app('');
echo "event test<br/>";
$foo = Mage::getModel('vps_test/observer');
echo get_class($foo) . '<br />';
Mage::dispatchEvent('test_event_one', array('object' => ''));
}
catch(Exception $e)
{
echo "exception<br/>$e";
}
所以....我没有做什么?是否可以在不运行完整的 Magento 应用程序的情况下使用 Magento 事件系统?
谢谢!
【问题讨论】:
标签: php events magento magento-1.5