记一次magento2购物车更新产品报Requested product doesn’t exist 事件

前几天一起处理项目的前端同事给我反馈了个错误,购物车产品列表在点击Edit item parameters修改添加产品的时候,会报Requested product doesn't exist错误。

之前一直忙着别的问题,今天有空看了一下,分析了一下问题。首先看了一下产品链接,找到数据库表quote_item查看了item_idparent_id发现没有问题。之后查看日志发现在review上有错误。回想起来曾经的同事之前层写过review的插件,重写了部分review功能。然后找到他在详情里面调用block->->getProductInfo()->getName(),查看了block,...Block\Form这个文件,发现里面继承的是\Magento\Review\Block\Form到这个时候便理解了为什么会报产品不存在这个问题。

因为\Magento\Review\Block\Form中的getProductInfo()这个函数调用了getProductId()这个函数,而普通方式调用getProductId()的时候其中返回的是id,但是在购物车去修改配置商品的产品配置的时候可以看到url是.../checkout/cart/configure/id/241/product_id/4/,在这个地方id其实是购物车item_id并非产品id,真正的产品id是product_id,到此这个问题就很清晰了。因为在这个地方调用了不属于产品的id。导致返回错误提示产品不存在。
记一次magento2购物车更新产品报Requested product doesn’t exist 事件插图

解决方式如下在重写的Block\Form.php中,重写getProductId()函数,判断是否存在product_id,如果存在则返回的是product_id,否则则返回id

/*
     * 重写getProductId,因配置产品调用的是父级id
     */
    public function getProductId()
    {
        $param = 'id';
        if ($this->getRequest()->getParam('product_id')) {
            $param = 'product_id';
        }
        return $this->getRequest()->getParam($param, false);
    }

如此,产品修改时返回产品不存在的问题就已经解决了, 如果有其他的方案也可以在本文下面留言。一起共同进步。

发表评论

发表评论

*

沙发空缺中,还不快抢~