我有一个工作实体,它有一个字段(类型为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
看起来您正试图将数据库中的空字符串转换为数组。问题来自类别
列。此列包含空值,而不是序列化的空数组。
一个可能的解决方案是用预期的数组替换空字符串,如下所示:
UPDATE `product` SET categories="a:0:{}" WHERE categories= "";
希望这能有所帮助。
我错了。我试图设置我自己的{locale}
路由段,而我应该使用本机{_locale}
(注意下划线-留档)。
如果您让symfony通过路由处理区域设置,Translatable将透明地处理实体翻译(包括表单提交),并且不需要调用$实体::setTranslatableLocale()
也不需要调用EntityManager::刷新()
。
不需要对数组字段进行特殊处理,它们可以无缝地进行开箱即用的转换。