检查DoctrineBehaviors中的字段是否存在转换

时间:2015-06-02 10:34:04

标签: php symfony doctrine-extensions

我对DoctrineBehaviors捆绑包有疑问。我试图为没有法语翻译的实体获取特定语言(法语)的翻译。它返回后备语言,前端可以,但我需要知道该语言是否有翻译,因为我需要填写后端。

我如何知道某个实体的字段是否已翻译成特定语言?

1 个答案:

答案 0 :(得分:0)

使用Translatable实体,您可以获取特定实体(documentation)已知的所有翻译。

$product = $this->getDoctrine()
    ->getRepository('AppBundle:Product')
    ->find($productId);

$repository = $this->getDoctrine()->getRepository('Gedmo\Translatable\Entity\Translation');
$translations = $repository->findTranslations($product);

变量$translations现在包含一个键控数组,例如

array(2) {
  ["en_US"]=>
  array(1) {
    ["name"]=>
    string(8) "Keyboard"
  }
  ["fr_FR"]=>
  array(1) {
    ["name"]=>
    string(7) "Clavier"
  }
}

确定实体是否已翻译现在只需检查区域设置是否在数组键中。

if (!array_key_exists('fr_FR', $translations)) {
    throw $this->createNotFoundException('product description not available in French');
}

请注意,Translatable实体不包含默认语言环境(除非您已将setPersistDefaultLocaleTranslation设置为true)。