Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 2:同时使用可翻译和可记录_Symfony_Doctrine Orm - Fatal编程技术网

Symfony 2:同时使用可翻译和可记录

Symfony 2:同时使用可翻译和可记录,symfony,doctrine-orm,Symfony,Doctrine Orm,我在symfony2为一家多语言新闻出版商工作,使用条令扩展:- 可翻译和可记录 虽然我有他们都与一个默认的英文职位(即更新日志)工作,我不能得到编辑的翻译被记录。。。记录被插入到“ext_log_entries”表中,但我只得到一个空的序列化数组 有人有什么想法或例子吗?对于这两个扩展,我几乎都遵循了GitHub指南 谢谢 我之前也试过做同样的事情。我不得不发现这两件事不可能同时使用,你必须为自己实现它 我是这样做的: Text.php Language.php use Doctrine\OR

我在symfony2为一家多语言新闻出版商工作,使用条令扩展:-

可翻译和可记录

虽然我有他们都与一个默认的英文职位(即更新日志)工作,我不能得到编辑的翻译被记录。。。记录被插入到“ext_log_entries”表中,但我只得到一个空的序列化数组

有人有什么想法或例子吗?对于这两个扩展,我几乎都遵循了GitHub指南


谢谢

我之前也试过做同样的事情。我不得不发现这两件事不可能同时使用,你必须为自己实现它

我是这样做的: Text.php

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();
希望它能帮助你,如果你有任何问题,请不要介意问

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