Php 使用元数据动态生成可翻译列

Php 使用元数据动态生成可翻译列,php,symfony,doctrine,Php,Symfony,Doctrine,我想使用元数据为我的实体创建一个可翻译的行为 我有一篇课堂文章 class Article implements TranslatableInterface { /** * @HeidanTranslatable */ private $title; /** * @HeidanLocale */ private $locale; public function getTitle() { return $this->title; } public function

我想使用元数据为我的实体创建一个可翻译的行为

我有一篇课堂文章

class Article implements TranslatableInterface {

/**
 * @HeidanTranslatable
 */
private $title;

/**
 * @HeidanLocale
 */
private $locale;


public function getTitle() {
    return $this->title;
}

public function setTitle($title) {
    $this->title = $title;
    return $this;
}

public function getLocale() {
    return $this->locale;
}

public function setLocale($locale) {
    $this->locale = $locale;
    return $this;
}
我希望有一种Gedmo条令扩展行为,它将根据属性和允许的区域设置在数据库列中创建

例如,对于entity文章,我希望创建两列:title\u fr、title\u en

我想把这些东西和条令行为联系起来,我做了一个loadClassMetadataListener

class LoadClassMetadataListener {

/**
 * @param LoadClassMetadataEventArgs $eventArgs
 */
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
{
    $metadata = $eventArgs->getClassMetadata();

    $metadata
        ->mapField(array('fieldName' => 'title_fr', 'type' => 'text'))
    ;

}
运行条令:schema:update--force时,出现以下错误:

[反射异常]
属性Heidan\CoreBundle\Entity\Article::$title\u fr不存在

所以我猜他们说财产所有权不存在,没错

我不想为我的所有实体手动设置属性(private$title\u fr、private$title\u en、private$content\u fr、private$content\u en)

到目前为止,有没有办法实现这种行为


非常感谢您的帮助。

我认为
title\u fr,title\u en
不是一个好的设计。。为什么不简单地使用呢?我曾经用一个专用的转换表连接我所有的对象,但是我做了太多的leftJoin,这造成了很多性能问题(有时我得到了16个leftJoin)。我也不喜欢实现外部捆绑包,因为我有外部规范,例如实现中文和生成ZH汉字。我没有找到我的问题的任何答案,所以我必须找到另一个解决方案,这不是我所期望的,但可以完成这项工作。我使用了PHP特性(content_fr、content_en、content_zh和content)+注释(哪个字段是可翻译的)+后加载侦听器,其任务是根据语言环境设置“content”。我认为这不是最好的方法,但它为我提供了灵活性和可重用性。