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

Shopware 6自定义Admin API端点无法仅返回指定字段求助

Shopware 6 Admin API自定义端点如何仅返回指定字段?

我为Shopware 6 Admin API开发了自定义端点,期望只返回商品的id、name字段以及关联cover的id,但实际调用时返回了完整的商品对象。

我的代码如下:

{% block response %}
    {% set criteria = {
        "includes": {
            "product": ["id", "name"],
            "cover": ['id']
        },
        "associations": {
            "cover": {},
        },
    }%}

    {% set products = services.repository.search('product', criteria) %}

    {% set response = services.response.json({ 'products': products }) %}
    {% do hook.setResponse(response) %}
{% endblock %}

实际返回结果包含了商品的所有字段(如taxId、manufacturerId等),而非指定的字段。

解决方案

问题出在直接将EntitySearchResult对象序列化为JSON时,Shopware不会自动应用criteria中的includes过滤规则。需要通过Shopware的数据标准化服务来处理搜索结果,使其遵循配置的字段过滤逻辑。

修改后的代码如下:

{% block response %}
    {% set criteria = {
        "includes": {
            "product": ["id", "name"],
            "cover": ["id"]
        },
        "associations": {
            "cover": {}
        }
    } %}

    {% set products = services.repository.search('product', criteria) %}
    {% set normalizedProducts = services.data.normalizer.normalize(products, 'api') %}

    {% set response = services.response.json({ 'products': normalizedProducts }) %}
    {% do hook.setResponse(response) %}

原理说明

  • services.data.normalizer是Shopware内置的数据标准化服务,调用normalize方法并指定格式为api时,会严格按照criteria中的includes配置过滤字段。
  • 该方法不仅会过滤商品主实体的字段,还会正确处理关联对象(如cover)的字段过滤,同时保留分页信息(total、page、limit等)的结构完整性。

内容的提问来源于stack exchange,提问作者Claudiu Stoica

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:12:11