好的 - 我已阅读并喜欢关于Magento前端/后端的讨论并同意Ben的回答 在Magento Request - Frontend or Backend?
现在让我们把它提升一个档次。我们的客户拥有高度定制的解决方案,我们使用Magento观察员调用Web服务,更新企业CRM系统中的客户和客户地址数据。这些事件依赖于customer_save_before,customeraddress_save_before事件,并且在前端和adminhtml方面的调用略有不同(感谢Ben!)。
现在我们看到一个循环的情况开始,CRM系统正在使用Magento API将更新插入Magento,这会触发customer_save_before事件,然后我们将数据发送回CRM--然后调用Magento API再等等,等等,直到整个房子的卡片都崩溃了。
我希望能够屏蔽入站API调用,但是,我找不到任何有关如何执行此操作的信息。
有什么建议吗?
答案 0 :(得分:1)
您可以查看名为该事件的区块。试试吧:
$block = $observer->getEvent()->getBlock();
if ($block instanceof Your_block_name) {
//do something
或者,您可以更改法师核心代码,以便在发送事件时为您的控件发送一些其他数据。 像那样:
Mage::dispatchEvent('customer_save_before',array('flag'=>'1'));
或类似的东西。 但是,如果这个事件被同一个区域从同一个地方调用,并且没有任何其他行为可以知道它何时被magento或webservice调用,那么它是不可能的。
答案 1 :(得分:0)
更新我以前的答案 - formdata检测工作正常,但是,我认为这样会更好 -
查看request_uri并查看api已被调用。
if (stripos($_SERVER['REQUEST_URI'], "index.php/api")) {
$ApiCall=true;
}
如果是,那么设置一个标志或做任何事情。