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

API Platform配置Gedmo Abstract Personal Translatable实现翻译持久化问题排查

问题排查与修复方案

1. 修复addTranslation方法参数类型错误

你当前Language实体中的addTranslation方法参数写死为CategoryTranslation类型,和实际关联的LanguageTranslation不匹配,Symfony序列化组件在反序列化translations集合时,找不到类型匹配的adder方法,直接跳过了该字段的处理。
修改后的代码:

// 替换原有的addTranslation方法,同时补充配套的removeTranslation方法,序列化组件处理集合需要成对的adder/remover
public function addTranslation(LanguageTranslation $t)
{
    if (!$this->translations->contains($t)) {
        $this->translations[] = $t;
        $t->setObject($this);
    }
}

public function removeTranslation(LanguageTranslation $t): void
{
    $this->translations->removeElement($t);
}

2. 让Language实体实现Translatable接口

Gedmo的个人翻译需要主实体实现Gedmo\Translatable\Translatable接口,同时引入对应trait:

use Gedmo\Translatable\Translatable;
use Gedmo\Translatable\Traits\Translatable as TranslatableTrait;

class Language implements Translatable
{
    use TranslatableTrait;
    // 原有代码保持不变
}

3. 修正LanguageTranslation实体的序列化配置

你当前给LanguageTranslation加了@ApiResource()注解但没有指定序列化组,导致反序列化时无法识别write组的字段。不需要直接暴露翻译实体接口的话直接删掉该注解即可,需要单独暴露的话补充上下文配置:

/**
 * @ORM\Entity
 * @ORM\Table(name="language_translations",
 *     uniqueConstraints={@ORM\UniqueConstraint(name="lookup_unique_idx", columns={
 *         "locale", "object_id", "field"
 *     })}
 * )
 * @ORM\Entity(repositoryClass="Gedmo\Translatable\Entity\Repository\TranslationRepository")
 * @ApiResource(
 *  normalizationContext={"groups" = {"read"}},
 *  denormalizationContext={"groups" = {"write"}}
 * )
 */
class LanguageTranslation extends AbstractPersonalTranslation
{
    // 原有代码保持不变
}

4. 确认Gedmo扩展配置

在config/packages/stof_doctrine_extensions.yaml中开启个人翻译支持:

stof_doctrine_extensions:
    default_locale: '%kernel.default_locale%'
    translation_fallback: true
    orm:
        default:
            translatable: true
    personal_translation:
        enabled: true

修复完成后重新发起请求,translations字段就会被正常反序列化、关联到主实体后持久化到翻译表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:09:03