在简而言之
中我正在编写Symfony2/Doctrine2应用程序,并已安装和配置了使用YAML的StofDoctrineExtensionsBundle提供的可翻译扩展名,但是没有生成其他翻译表(S),并且在尝试与已尝试与已尝试使用的实体一起工作时会引发以下例外可翻译的属性:
未找到名为'/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/gedmo/gedmo/translatable/entity/translation/translation.orm.yml'for类''。
更详细地
我正在尝试在我的Symfony2/Doctrine2应用程序中使用可翻译的扩展名,该应用程序由StofDoctrineExtensionsBundle提供,但是我可以找到的大多数可用文档主要针对配置注释的使用情况,但是yaml,因为那是我配置其他所有内容的方式。
我的配置
我已将以下内容添加到我的 composer.json
文件中,并运行了 composer update
命令: "stof/doctrine-extensions-bundle": "dev-master"
,捆绑包在我的 app/AppKernel.php
文件中注册。
我的app/config/config.yml
文件具有以下配置:
doctrine:
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
mappings:
gedmo_translatable:
type: yml
prefix: GedmoTranslatableEntity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
alias: GedmoTranslatable
is_bundle: false
stof_doctrine_extensions:
default_locale: en_GB
translation_fallback: true
orm:
default:
timestampable: true
translatable: true
然后,我在yaml中定义了一个实体:
FooContentBundleEntityArticle:
type: entity
repositoryClass: FooContentBundleRepositoryArticleRepository
table: article
gedmo:
translation:
locale: locale
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
name:
type: string
length: 64
gedmo:
- translatable
content:
type: text
gedmo:
- translatable
# ... #
oneToMany:
# ... #
我已经运行了控制台命令php app/console doctrine:generate:entities FooContentBundle
生成实体类,并手动添加了Locale属性和设置器:
class Article
{
/* ... */
private $locale;
public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
/* ... */
}
运行php app/console doctrine:schema:update --force
后,我的文章表及其关联创建,但与翻译有关(我假设应该为此创建一个表...)
然后,在与可翻译的实体一起工作时,我会得到例外:
未找到名为'/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/gedmo/gedmo/translatable/entity/translation/translation.orm.yml'for类''。
例外是在它在其中寻找的路径中不存在的yaml文件,我也无法在其他任何地方找到它。
有人对我要出错的地方有任何想法吗?
更新:经过进一步调查...
运行php app/console doctrine:mapping:info
显示我的所有实体,而与翻译无关,但是,如果我更新app/config/config.yml
文件的gedmo_translatable:
部分,然后将type: yml
更改为type: annotation
,然后再次运行该命令,我将列出以下列出:
[OK] GedmoTranslatableEntityMappedSuperclassAbstractTranslation
[OK] GedmoTranslatableEntityTranslation
[OK] GedmoTranslatableEntityMappedSuperclassAbstractPersonalTranslation
在此时,我可以更新我的模式,并且有一个新的ext_translations
表。但是,与我的实体合作时,没有什么都没有插入其中,大概是因为它现在期望通过注释而不是yaml进行配置,所以将我的配置更改回type: yml
开始再次抛出异常,如预期。
尝试了文档表明无法正常工作的事情,即在同一捆绑包中混合注释和yaml配置后,看来我有工作。整个事情感觉就像一个错误或不完整的实现,但是我可能会错误地做某事。这是工作...
在app/config/config.yml
中设置以下内容:doctrine.orm.mappings.gedmo_translatable.type: annotation
在我的yaml架构定义中设置可翻译的配置,如我最初的问题以及作为我的类文件中的注释:
/* ... */
use GedmoMappingAnnotation as Gedmo;
/* ... */
class Article
{
/* ... */
/**
* @GedmoTranslatable
* @var string $name
*/
private $name;
/**
* @GedmoLocale
*/
private $locale;
public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
/* ... */
}
执行此操作后,将创建附加表,并在坚持实体时将翻译插入其中。