前几天一起处理项目的前端同事给我反馈了个错误,购物车产品列表在点击Edit item parameters
修改添加产品的时候,会报Requested product doesn't exist
错误。
之前一直忙着别的问题,今天有空看了一下,分析了一下问题。首先看了一下产品链接,找到数据库表quote_item
查看了item_id
和parent_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。导致返回错误提示产品不存在。
解决方式如下在重写的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);
}
如此,产品修改时返回产品不存在的问题就已经解决了, 如果有其他的方案也可以在本文下面留言。一起共同进步。
发表评论
沙发空缺中,还不快抢~