You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:15:08