如何将Shopware 6后台定义的值传入MultiFilter并循环处理前缀?
Shopware 6:动态生成MultiFilter内的PrefixFilter实现方案
你没法在MultiFilter的参数数组里直接嵌入while循环,得先把前缀数组对应的PrefixFilter集合提前生成,再和其他固定过滤器合并后传入。以下是修正后的可运行实现代码:
// 后台获取的前缀字符串数组 $prefixes = ['Aaa', 'Bbb', 'Ccc', 'Ddd']; // 批量生成前缀过滤器集合 $prefixFilters = array_map(function ($prefix) { return new PrefixFilter('product.properties.name', $prefix); }, $prefixes); // 定义其他固定过滤器 $otherFilters = [ new EqualsFilter('product.properties.group.name', 'G1'), new EqualsFilter('product.properties.group.name', 'G2'), // 可添加更多过滤器... ]; // 合并动态与固定过滤器数组 $allFilters = array_merge($prefixFilters, $otherFilters); // 条件判断后添加MultiFilter if (in_array('3f777000a2734deead391133cee3a6a9', $currentPropertyOptions)) { $criteria->addFilter( new MultiFilter( MultiFilter::CONNECTION_OR, // 注意修正原代码中类名拼写错误:Multifilter → MultiFilter $allFilters ) ); }
关键细节说明:
- 用
array_map遍历前缀数组批量生成PrefixFilter,比while循环更简洁且符合PHP代码规范 - 通过
array_merge合并动态生成的前缀过滤器和固定过滤器,统一传入MultiFilter - 修正了原代码中
Multifilter的类名拼写错误(正确类名为MultiFilter) - 避免了原代码中
$ii与$i变量不一致的低级错误
内容的提问来源于stack exchange,提问作者Stacker1427
相关产品推荐
相关产品推荐

