【问题标题】:Magento Request - Frontend, Backend or API?Magento 请求 - 前端、后端还是 API?
【发布时间】:2012-08-19 08:05:40
【问题描述】:

好的 - 我已阅读并喜欢关于 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再次,等等,等等,直到整个房子-o-cards倒塌。

我希望能够屏蔽入站 API 调用,但是我找不到任何有关如何执行此操作的信息。

有什么建议吗?

【问题讨论】:

    标签: web-services api events magento


    【解决方案1】:

    更新我之前的答案 - formdata 检测工作正常,但是,我认为这会更好 -

    查看request_uri,看到api被调用了。

    if (stripos($_SERVER['REQUEST_URI'], "index.php/api")) {
       $ApiCall=true;
    }
    

    如果是这样,那么设置一个标志或做任何事情。

    【讨论】:

      【解决方案2】:

      您可以查看谁调用了该事件。试试看:

      $block = $observer->getEvent()->getBlock();
          if ($block instanceof Your_block_name) {
      //do something
      

      或者,您可以更改法师核心代码,以便在调度事件时为您的控件发送一些额外的数据。 像这样:

      Mage::dispatchEvent('customer_save_before',array('flag'=>'1'));
      

      或者类似的东西。 但是,如果这个事件被同一个块从同一个地方调用,并且没有任何其他行为知道它何时被 magento 或 web 服务调用,那么它是不可能的。

      【讨论】:

      • 问题是 API 调用也调度事件。我会看看块建议。不应有与 API 调用关联的块。
      猜你喜欢
      • 2012-03-30
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2020-03-13
      • 2019-05-02
      • 1970-01-01
      • 2010-09-17
      • 2022-01-24
      相关资源
      最近更新 更多