1

DoctrineExtensions에서 Translatable을 사용하여 traslated 필드가있는 엔티티가 있습니다. 이는 모습입니다 : DoctrineExtensions로 번역 된 Doctrine 엔티티 번역 가능

/** 
* @ORM\Table 
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\SurveyAnswerRepository") 
* @Gedmo\Loggable 
*/ 
class SurveyAnswer 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(type="string", length=200) 
    * @Gedmo\Versioned 
    * @Gedmo\Translatable 
    */ 
    private $name; 

    /** 
    * @Gedmo\Locale 
    * Used locale to override Translation listener`s locale 
    * this is not a mapped field of entity metadata, just a simple property 
    * and it is not necessary because globally locale can be set in listener 
    */ 
    private $locale; 

    public function __clone() 
    { 
     if ($this->getId()) 
     { 
      $this->id = null; 
     } 
    } 

    public function setTranslatableLocale($locale) 
    { 
     $this->locale = $locale; 
    } 

    public function getId() 
    { 
     return $this->id; 
    } 

    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    public function getName() 
    { 
     return $this->name; 
    } 

} 

나는 그런 개체를 복제

, 새로운 하나의 심포니 응용 프로그램에서 설정 한 현재의 로케일 만 번역으로 구성되어 있습니다. 다른 모든 언어의 번역이 누락되었습니다.

+0

어떻게 번역이 저장됩니다? 당신은 그들에게 접근 할 수 있습니까? –

+0

별도의 테이블에 있지만 가능하면 수동 복사 (나는 누락 된 번역을 찾아 완성하기위한 몇 가지 추가 코드 작성)를 피하고 싶습니다. :) – Marek

답변

0

Gedmo 리포지토리 기능을 사용하여 모든 변환 가능한 필드를 가져 와서 새 엔터티 용으로 변환 할 수 있습니다. 컨트롤러의 복제 기능 (예를 들어, SurveyController :: duplicateAction)에서

는 :

$newEntity = clone $entity; 
$em = $this->getDoctrine()->getManager(); 
$transRepo = $em->getRepository('Gedmo\Translatable\Entity\Translation'); 

// Get all translations from original entity 
$translations = $transRepo->findTranslations($entity); 
foreach ($translations as $locale => $fields) { 
    foreach ($fields as $field => $value) { 
     // Add new translation for new entity, per locale, per field 
     $transRepo->translate($newEntity, $field, $locale, $value); 
    } 
} 
$em->flush();