【问题标题】:Magento V1.9 is running in timeout after sales_flat_quote_item update in event observerMagento V1.9 在事件观察器中的 sales_flat_quote_item 更新后超时运行
【发布时间】:2021-02-13 22:48:54
【问题描述】:

我尝试将附加信息(来自第三方系统)保存到 Magento V1.9 中的sales_flat_quote_item db。 观察者工作正常。

应该更新的数据已经更新,但每次都以“内部服务器错误 500”结束,即使我在 $quoteItem->save(); 之后添加了 die()

当我评论$quoteItem->save();时没有超时

config.xml

<events>
    <sales_quote_item_save_commit_after>
        <observers>
            <MyCompany_MyProject_salesQuoteItemSaveCommitAfter>
                <type>singleton</type>
                <class>MyCompany_MyProject_Model_Observer</class>
                <method>salesQuoteItemSaveCommitAfter</method>
            </MyCompany_MyProject_salesQuoteItemSaveCommitAfter>
        </observers>
    </sales_quote_item_save_commit_after>
</events>

Observer.php

/**
     * @param Varien_Event_Observer $observer
     */
    public function salesQuoteItemSaveCommitAfter($observer)
    {
        //var_dump($post); die();

        $quoteItem = $observer->getEvent()->getItem();
        //var_dump($quoteItem->getId()); echo die();

        if (!$quoteItem->getId()) {
            //quote not saved in the database
            return $this;
        }
        //var_dump($quoteItem->getId()); die();

        $quoteItem->setPriceInclTax($post['my_custom_price']);
        $quoteItem->save();
        
        return $this;
    }

【问题讨论】:

  • 我想我知道为什么会超时。我认为在事件观察者的情况下,由于引用项的更改并一次又一次地回忆事件,它会进入一个无休止的循环。

标签: php magento magento-1.9 observers


【解决方案1】:

没错,

事件sales_quote_item_save_commit_after在每次记录报价实体后启动,这里在代码中$quoteItem->save();启动,就在观察者重新启动之后等等:这会创建一个无限循环。

在这种情况下,您可以改为使用 sales_quote_item_save_before 事件或执行检查以验证 PriceInclTax 字段是否已记录。

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多