3
IM在一個多語種新聞發佈商合作在Symfony2中使用學說的擴展: -Symfony的2:使用平移並且可記錄的一起
平移並且可記錄的
雖然我把它們都與一個默認的英語崗位工作(即登錄更新)我不能得到編輯翻譯記錄...記錄被插入到'ext_log_entries'表中,但我只得到一個空的序列化數組。
有沒有人有任何想法或例子?我幾乎都遵循git-hub指南來擴展這兩個擴展。
謝謝!
IM在一個多語種新聞發佈商合作在Symfony2中使用學說的擴展: -Symfony的2:使用平移並且可記錄的一起
平移並且可記錄的
雖然我把它們都與一個默認的英語崗位工作(即登錄更新)我不能得到編輯翻譯記錄...記錄被插入到'ext_log_entries'表中,但我只得到一個空的序列化數組。
有沒有人有任何想法或例子?我幾乎都遵循git-hub指南來擴展這兩個擴展。
謝謝!
我試着早點做同樣的事情。我必須找出將這兩件事情組合在一起是不可能的,你必須爲你實現它。
我就是這麼做的: 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();
希望它可以幫助你,如果你有任何問題,不介意問。
請顯示一些代碼。 –
關於這方面的任何消息? – Bagbyte