Magento 2.4.4 SalesRule Validator::process()变更后自定义代码传参问题
Magento 2.4.4 SalesRule Validator::process() 调用问题修复
问题原因
Magento 2.4.4 对SalesRule\Model\Validator::process()方法做了变更:第二个参数从规则数组改为单个Rule对象。而你的自定义代码中,$this->salesRuleValidator->_getRules($item->getAddress())返回的是符合条件的规则集合(数组),直接传入会导致参数类型不匹配,无法正确执行。
修复代码
将自定义代码修改为遍历规则集合,逐个传入process()方法:
//调用vendor\magento\module-sales-rule\Model\Validator::process() $items = $this->cart->getQuote()->getAllVisibleItems(); /** @var Item $item */ foreach ($items as $key => $item) { // 获取当前地址对应的所有规则 $rules = $this->salesRuleValidator->_getRules($item->getAddress()); // 遍历每个规则,单独调用process方法 foreach ($rules as $rule) { $this->salesRuleValidator->process($item, $rule); } }
说明
_getRules()方法返回的是满足地址条件的所有促销规则数组,2.4.4版本要求process()每次只处理单个规则,因此需要嵌套遍历,确保每个规则都能正确传入方法执行。
内容的提问来源于stack exchange,提问作者Karthick Sethu
相关产品推荐
相关产品推荐

