2012-06-25 50 views
3

IM在一個多語種新聞發佈商合作在Symfony2中使用學說的擴展: -Symfony的2:使用平移並且可記錄的一起

平移並且可記錄的

雖然我把它們都與一個默認的英語崗位工作(即登錄更新)我不能得到編輯翻譯記錄...記錄被插入到'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; 
} 

在你的控制器中,你現在可以這樣做: 得到一個文本對象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 

作出新的文本對象

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

希望它可以幫助你,如果你有任何問題,不介意問。

相關問題