2012-06-25 2 views
3
임 교리 확장을 사용 symfony2에 다국어 뉴스 발행인 작업

: -심포니 2 : 번역 가능한 및 Loggable를 사용하여 함께

번역 가능한 및 Loggable

내가 그들 모두 기본 영어 게시물 작업이 있지만 (즉 업데이트 로그) 나는 편집 된 번역을 기록 할 수 없다. 레코드는 'ext_log_entries'테이블에 삽입되지만 빈 직렬화 된 배열 만 가져온다.

누구에게 아이디어 나 예제가 있습니까? 나는 거의 두 확장판을위한 git-hub 가이드를 따라 갔다.

감사합니다.

+1

일부 코드를 표시하십시오. –

+0

이것에 대한 뉴스? – Bagbyte

답변

1

이전에 똑같은 작업을 시도했습니다. 나는이 두 가지를 함께 사용할 수 없다는 것을 알아야만했습니다. 직접 구현해야합니다.

나는 이런 식으로했다 : Text.php를

use Gedmo\Mapping\Annotation as Gedmo; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* @ORM\Table(name="text") 
* @ORM\Entity 
* @Gedmo\Loggable 
*/ 
class Text 
{ 
    /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ 
    private $id; 

    /** @ORM\Column(name="class", type="string") */ 
    private $class; 

    /** @ORM\Column(name="field", type="string") */ 
    private $field; 

    /** @ORM\Column(name="key_id", type="integer") */ 
    private $key_id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Language") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="lang_id", referencedColumnName="id") 
    * }) 
    */ 
    private $lang; 

    /** 
    * @Gedmo\Versioned 
    * @ORM\Column(name="text", type="text") 
    */ 
    private $text; 

    ...getter setter... 
} 

Language.php

use Doctrine\ORM\Mapping as ORM; 


/** 
* @ORM\Table(name="language") 
* @ORM\Entity 
*/ 
class Language { 

    /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ 
    private $id; 

    /** @var @ORM\Column(name="language", type="string") */ 
    private $language; 
... getter setter .... 
이제

나는이 관리 할 수있는 서비스를 썼다 : TextManager.php

/** 
* @param $object 
* @param $field 
* @param $langKey 
* @return Text 
* 
* gets the existing text for the object 
* if it does not exist, it creates a new one 
*/ 
public function setupText($object, $field, $langKey){ 
    $lang = $this->langRepo->findOneBy(array("language" => $langKey)); 

    $txt = $this->textRepo->findOneBy(array(
     'class' => get_class($object), 'field' => $field, 
     'lang' => $lang, 'key_id' => $object->getId() 
    )); 
    if($txt != null){ 
     return $txt; 
    } 

    $txt = new Text(); 
    $txt->setClass(get_class($object)); 
    $txt->setField($field); 
    $txt->setKeyId($object->getId()); 
    $txt->setLang($lang); 

    return $txt; 
} 

/** 
* @param $object 
* @param $field 
* @param $langKey 
* @return mixed 
* gives you the text object or false if not found 
*/ 
public function getText($object, $field, $langKey){ 
    $lang = $this->langRepo->findOneBy(array("language" => $langKey)); 

    $txt = $this->textRepo->findOneBy(array(
     'class' => get_class($object), 'field' => $field, 
     'lang' => $lang, 'key_id' => $object->getId() 
    )); 

    if ($txt == null){ 
     return false; 
    } 

    return $txt; 
} 

컨트롤러에서 다음과 같이 할 수 있습니다.은

$text = $textManager->setupText($object, 'otherfield', 'fr'); 
$text->setText("your super text"); 
$em->persist($text); 
$em->flush(); 

은 당신을 돕고, 당신은 질문이있는 경우, 요청의 마음을 그나마 희망 새 텍스트 객체를 만들기 위해 ohter 버전

$logRepo = $em->getRepository('Gedmo\Loggable\Entity\LogEntry'); // we use default log entry class 
$text = $textManager->setupText($object, 'abouttext', 'de'); 
$logRepo->revert($text, 1); //1 is the version you would like to have 
$text->getText(); //version 1 text 

에서 텍스트 개체를 얻을 수 있습니다.