Shopware 6 RuleBuilder:后台中RuleScope的getSource为何始终是SalesChannelApiSource?
问题解答
这不是Bug,是Shopware 6的设计逻辑导致的。
原因分析
当你在后台操作关联销售渠道的业务场景(比如编辑订单时选择支付方式、配置销售渠道专属的支付方式规则),RuleScope的上下文会自动切换到对应销售渠道的上下文,此时getSource()返回的是SalesChannelApiSource——因为规则本身是绑定销售渠道生效的。而AdminSalesChannelApiSource仅会在纯后台管理操作(比如管理系统设置、用户权限)且不关联具体销售渠道时才会返回。
正确的判断方式
不要依赖getSource()的类型区分后台/前端,直接使用上下文的isAdmin()方法即可,这个方法会准确标记当前是否处于后台操作环境:
// 在自定义规则条件的match方法中使用 public function match(RuleScope $scope): bool { return $scope->getContext()->isAdmin(); }
适配支付方式规则的建议
如果你要实现“仅后台显示特定支付方式”的需求:
- 创建一个自定义规则条件,内部通过
isAdmin()判断当前是否为后台环境 - 在支付方式的规则配置中,添加这个自定义条件,设置为“当规则匹配时显示支付方式”
- 这样就能确保该支付方式仅在后台操作时可见,前端自动隐藏
这个方式比检查请求路径更可靠,因为它直接依赖Shopware上下文的官方标记,不受路由变化等因素影响。
内容的提问来源于stack exchange,提问作者cromhummus
相关产品推荐
相关产品推荐

