如何扩展ProductSearchCriteriaEvent搜索条件并解决空白搜索结果问题
解决ProductSearchCriteriaEvent扩展搜索条件的问题
你的代码出现空白搜索结果的原因是:直接调用addFilter()会将新的OrFilter与原有搜索条件以AND逻辑组合,只有同时满足原搜索条件和额外商品条件的结果才会被返回。如果原搜索词未匹配到任何商品,自然就会返回空结果。
要实现「保留原有搜索结果 + 额外指定商品」的需求,需要将原有搜索条件与额外商品的条件用OR逻辑组合,具体修正代码如下:
class ProductSearchSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ ProductSearchCriteriaEvent::class => 'extendSearchCriteria', ]; } public function extendSearchCriteria(ProductSearchCriteriaEvent $event): void { $criteria = $event->getCriteria(); $originalFilter = $criteria->getFilter(); // 定义额外需要加入的商品筛选条件 $additionalFilter = new OrFilter([ new EqualsFilter('productNumber', 'SW000001'), new EqualsFilter('productNumber', 'SW000002'), ]); // 组合原有条件与额外条件:满足原有搜索规则 或者 属于指定商品 $combinedFilter = $originalFilter ? new OrFilter([$originalFilter, $additionalFilter]) : $additionalFilter; // 替换原有筛选条件为组合后的逻辑 $criteria->setFilter($combinedFilter); } }
修改后,搜索结果会同时包含两类商品:
- 原有搜索词匹配到的商品
- 指定编号的SW000001、SW000002商品
内容的提问来源于stack exchange,提问作者Simon Mavsar
相关产品推荐
相关产品推荐

