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
相关产品推荐
相关产品推荐

