我正在使用教义扩展在symfony2中为多语言新闻出版商工作:-
可翻译和可移动
虽然我让他们都使用默认的英文帖子(即更新日志),但我无法记录编辑的翻译......该记录入到"ext_log_entries"表中,但我只得到一个空的序列化数组。
有人有任何想法或例子吗?我几乎遵循了两个扩展的 git-hub 指南。
谢谢!
我之前尝试过做同样的事情。我不得不发现不可能同时使用这两件事,你必须自己实现它。
我是这样做的:文本.php
use GedmoMappingAnnotation as Gedmo;
use DoctrineORMMapping as ORM;
/**
* @ORMTable(name="text")
* @ORMEntity
* @GedmoLoggable
*/
class Text
{
/** @ORMId @ORMGeneratedValue @ORMColumn(type="integer") */
private $id;
/** @ORMColumn(name="class", type="string") */
private $class;
/** @ORMColumn(name="field", type="string") */
private $field;
/** @ORMColumn(name="key_id", type="integer") */
private $key_id;
/**
* @ORMManyToOne(targetEntity="Language")
* @ORMJoinColumns({
* @ORMJoinColumn(name="lang_id", referencedColumnName="id")
* })
*/
private $lang;
/**
* @GedmoVersioned
* @ORMColumn(name="text", type="text")
*/
private $text;
...getter setter...
}
语言.php
use DoctrineORMMapping as ORM;
/**
* @ORMTable(name="language")
* @ORMEntity
*/
class Language {
/** @ORMId @ORMGeneratedValue @ORMColumn(type="integer") */
private $id;
/** @var @ORMColumn(name="language", type="string") */
private $language;
... getter setter ....
现在我编写了一个服务来管理这些:文本管理器.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;
}
在您的控制器中,您现在可以执行以下操作:获取其他版本中的文本对象
$logRepo = $em->getRepository('GedmoLoggableEntityLogEntry'); // 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();
希望对您有所帮助,如果您有任何问题,请不要介意询问。