提问者:小点点

可翻译原则数组域


我有一个工作实体,它有一个字段(类型为ArrayCollection),该字段与doctrine映射到一个类型为array的列。

现在我需要这个字段是可翻译的(条令行为),但在获取未翻译的区域设置时,我得到一个无法将数据库值“”转换为条令类型的数组ConversionException。

如何保持数组的功能并使其可翻译?


/**
 * @var ArrayCollection
 *
 * @Gedmo\Translatable
 * @ORM\Column(name="categories", type="array")
 */
private $categories;


// ... Controller ProductController nitty gritty

public function showAction(Request $request, $id, $locale)
{
    // omitted stuff, load $product by $id

    $product->setTranslatableLocale($locale); // load translations
    $em->refresh($product);

    return $this->render('AcmeExampleBundle:Product:show.html.twig', [
        'product' => $product
    ]);
}


转换异常

无法将数据库值“”转换为条令类型数组


异常堆栈跟踪:pastebin


共2个答案

匿名用户

看起来您正试图将数据库中的空字符串转换为数组。问题来自类别列。此列包含空值,而不是序列化的空数组。

一个可能的解决方案是用预期的数组替换空字符串,如下所示:

UPDATE `product` SET categories="a:0:{}" WHERE categories= "";

希望这能有所帮助。

匿名用户

我错了。我试图设置我自己的{locale}路由段,而我应该使用本机{_locale}(注意下划线-留档)。

如果您让symfony通过路由处理区域设置,Translatable将透明地处理实体翻译(包括表单提交),并且不需要调用$实体::setTranslatableLocale()也不需要调用EntityManager::刷新()

不需要对数组字段进行特殊处理,它们可以无缝地进行开箱即用的转换。