如何在 Sylius 中手动检查促销规则

时间:2021-02-18 14:03:31

标签: php symfony symfony4 sylius sylius-resource

我正在尝试检查订单的促销规则。

我正在覆盖订单处理器以修改它处理促销优先级的方式(某些客户群具有特殊优势,即独占优势)。

我希望最好的促销活动处于活动状态,例如:

  • 客户是“黄金”,每笔订单可享受 10% 的折扣。
  • 一张优惠券给他 30 美元的折扣
  • 订单是 250 美元

优惠券更适合我的客户,对吧?但是独家促销的优先级使其默认选中。

我已经检查了我的订单处理程序中存在的每个促销活动,以找到最适合客户的促销活动并应用它。它起作用了。

问题:我无法检查促销规则是否符合条件。因此,我正在向不应该促销的客户进行促销。

我如何访问 PromotionRulesEligibilityChecker ? 好像不是自动连线的,我也进不去。

所以,我试过这种方式:

$ruleRegistery = new ServiceRegistry(RuleCheckerInterface::class);
/** @var PromotionRule $rule */
foreach ($promotion->getRules() as $rule) {
       $ruleChecker = $ruleRegistery->get($rule->getType());
       $promotionRulesEligibilityChecker = new \Sylius\Component\Promotion\Checker\Eligibility\PromotionRulesEligibilityChecker($ruleChecker);

       if (!$promotionRulesEligibilityChecker->isEligible($promotionSubject, $promotion)) {
             return false;
       }
}
return true;

ServiceRegistery 不知道任何规则类型,请给我:

<块引用>

服务服务“item_total”不存在,可用服务服务:“”

有什么想法吗?

非常感谢

0 个答案:

没有答案