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

Shopware 6自定义产品扩展翻译保存失败:400错误求助

Shopware 6自定义产品扩展翻译字段保存400错误排查

我正在开发一款包含可翻译字段headline的Shopware 6自定义产品扩展,已按照官方推荐步骤配置实体定义与迁移,但保存带翻译的产品时遭遇400 Bad Request错误。

我的JS组件

const {Component} = Shopware;
const {Criteria} = Shopware.Data;
const Context = Shopware.Context;

import template from "./sw-product-extension-detail-specifications.html.twig";

Component.override('sw-product-detail-specifications', {
    template,

    inject: ['repositoryFactory'],

    data() {
        return {
            productId: null,
            startingAidData: null
        };
    },

    created() {
        this.productId = this.$route.params.id;
        this.loadExtension();
    },

    computed: {
        wucPluginStartingAidExtensionCriteria() {
            const criteria = new Criteria();
            criteria.addFilter(Criteria.equals('productId', this.productId));
            return criteria;
        },

        wucPluginStartingAidExtensionRepository() {
            return this.repositoryFactory.create('wuc_plugin_starting_aid_extension');
        }
    },

    methods: {
        loadExtension() {
            this.wucPluginStartingAidExtensionRepository
                .search(this.wucPluginStartingAidExtensionCriteria, Context.api)
                .then(startingAidData => {
                    if (startingAidData.last()) {
                        console.log('Data found', startingAidData.last());
                        this.product.extensions.wucPluginStartingAidExtension = startingAidData.last();
                    } else {
                        console.log('Create and Set New Entity');
                        this.startingAidData = this.wucPluginStartingAidExtensionRepository.create(Shopware.Context.api);
                        this.startingAidData.productId = this.productId;
                        this.startingAidData.headline = 'Test!'
                        this.product.extensions.wucPluginStartingAidExtension = this.startingAidData;

                        console.log(this.product.extensions.wucPluginStartingAidExtension);
                    }
                })
                .catch(error => {
                    console.error('Error loading extension:', error);
                });
        }
    }
});

实体定义

<?php declare(strict_types=1);

namespace WucPluginStartingAid\Extension\Content\Product;

use Shopware\Core\Content\Product\ProductDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\EntityDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\Field\FkField;
use Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\ApiAware;
use Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\PrimaryKey;
use Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\Required;
use Shopware\Core\Framework\DataAbstractionLayer\Field\IdField;
use Shopware\Core\Framework\DataAbstractionLayer\Field\OneToOneAssociationField;
use Shopware\Core\Framework\DataAbstractionLayer\Field\TranslatedField;
use Shopware\Core\Framework\DataAbstractionLayer\Field\TranslationsAssociationField;
use Shopware\Core\Framework\DataAbstractionLayer\FieldCollection;
use WucPluginStartingAid\Core\Content\StartingAid\Aggregate\StartingAidTranslation\StartingAidTranslationDefinition;

class StartingAidExtensionDefinition extends EntityDefinition
{
    public const ENTITY_NAME = 'wuc_plugin_starting_aid_extension';

    public function getEntityName(): string
    {
        return self::ENTITY_NAME;
    }

    public function getEntityClass(): string
    {
        return StartingAidExtensionEntity::class;
    }

    protected function defineFields(): FieldCollection
    {
        return new FieldCollection([
            (new IdField('id', 'Id'))->addFlags(new Required(), new PrimaryKey(), new ApiAware()),
            (new FkField('product_id', 'productId', ProductDefinition::class))->addFlags(new ApiAware()),
            (new TranslatedField('headline'))->addFlags(new ApiAware(), new Required()),

            new OneToOneAssociationField('product', 'product_id', 'id', ProductDefinition::class, false),
            (new TranslationsAssociationField(
                StartingAidTranslationDefinition::class,
                'wuc_plugin_starting_aid_id'
            ))->addFlags(new ApiAware(), new Required())


        ]);
    }
}
<?php declare(strict_types=1);

namespace WucPluginStartingAid\Core\Content\StartingAid\Aggregate\StartingAidTranslation;

use Shopware\Core\Framework\DataAbstractionLayer\EntityTranslationDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\Required;
use Shopware\Core\Framework\DataAbstractionLayer\Field\StringField;
use Shopware\Core\Framework\DataAbstractionLayer\FieldCollection;
use WucPluginStartingAid\Extension\Content\Product\StartingAidExtensionDefinition;

class StartingAidTranslationDefinition extends EntityTranslationDefinition
{
    public const ENTITY_NAME = 'wuc_plugin_starting_aid_translation';

    public function getEntityName(): string
    {
        return self::ENTITY_NAME;
    }

    public function getEntityClass(): string
    {
        return StartingAidTranslationEntity::class;
    }

    public function getParentDefinitionClass(): string
    {
        return StartingAidExtensionDefinition::class;
    }

    protected function defineFields(): FieldCollection
    {
        return new FieldCollection([
            (new StringField('headline', 'headline'))->addFlags(new Required()),
        ]);
    }
}

错误信息

POST http://localhost:8888/api/_action/sync 400 (Bad Request)
{
  "errors": [
    {
      "code": "c1051bb4-d103-4f74-8988-acbcafc7fdc3",
      "status": "400",
      "detail": "This value should not be blank.",
      "source": {
        "pointer": "/write/0/wucPluginStartingAidExtension/translations/2fbb5fe2e29a4d70aa5854ce7ce3e20b/wucPluginStartingAidExtensionId"
      },
      // ... rest of the error message ...
    }
  ]
}

已完成的排查步骤

  • 验证实体关系:主扩展实体与翻译实体的关系无误
  • 清除Shopware缓存
  • 重新构建admin.js等资源

疑问

我是否忽略了Shopware 6翻译保存机制的特定细节?扩展与翻译数据的保存顺序是否存在问题?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:14:58