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

Shopware 6:如何让addExtension添加的自定义数据在Store API返回中显示

解决方案:让动态添加的产品扩展在Store API中返回

核心问题

你通过ProductListingResultEvent动态添加的扩展默认不会出现在Store API响应里,因为Shopware的API序列化器默认只包含实体定义中注册并标记为ApiAware的扩展,或手动标记为ApiAware的动态扩展。

快速解决方法:标记动态扩展为ApiAware

在调用addExtension时,传入第三个参数true,直接将该动态扩展标记为API可见:

// 第三个参数设为true,标记扩展为API可返回
$product->addExtension('myExtension', new ArrayStruct(['foo' => 'bar']), true);

修改后,store-api/product-listing接口的响应中就会出现你期望的myExtension字段,格式与示例一致。

可选方案:预先注册实体扩展(推荐长期场景)

如果该扩展是长期业务需求,建议在产品实体定义中预先注册并标记为ApiAware,确保所有场景下API都会返回该字段:

  1. 创建自定义产品实体定义扩展类:
<?php

namespace YourPluginNamespace\Content\Product;

use Shopware\Core\Content\Product\ProductDefinition as CoreProductDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\Field\JsonField;
use Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\ApiAware;
use Shopware\Core\Framework\DataAbstractionLayer\FieldCollection;

class ProductDefinition extends CoreProductDefinition
{
    public function extendFields(FieldCollection $collection): void
    {
        parent::extendFields($collection);
        
        // 注册myExtension字段并标记为ApiAware
        $collection->add(
            (new JsonField('my_extension', 'myExtension'))
                ->addFlags(new ApiAware())
        );
    }
}
  1. 在插件的services.xml中注册自定义定义:
<service id="YourPluginNamespace\Content\Product\ProductDefinition" decorates="Shopware\Core\Content\Product\ProductDefinition">
    <argument type="service" id="YourPluginNamespace\Content\Product\ProductDefinition.inner"/>
    <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\JsonFieldSerializer"/>
</service>
  1. 后续在事件中直接赋值即可:
$product->setMyExtension(['foo' => 'bar']);
// 或继续使用addExtension,因已注册,API会自动返回
$product->addExtension('myExtension', new ArrayStruct(['foo' => 'bar']));

关于动态扩展的ApiAware标记

可以为动态扩展设置ApiAware标记,通过addExtension方法的第三个参数$apiAware控制,传入true即可让该扩展被API序列化器包含到响应中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:03:20