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”。我认为这不是最好的方法,但它为我提供了灵活性和可重用性。