简而言之
我正在编写一个 Symfony2 / Doctrine2 应用程序,并使用 YAML 安装和配置了 StofDoctrineExtensionsBundle 提供的可翻译扩展,但是没有生成额外的翻译表,并且在尝试使用具有可翻译属性的实体时抛出以下异常:
没有找到名为“/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity/Translation.orm.yml”的类“Gedmo\Translatable\Entity\Translation”的映射文件。
更详细
我试图让 Translatable 扩展在StofDoctrineExtensionsBundle提供的 Symfony2 / Doctrine2 应用程序中工作,但是我能找到的大多数可用文档主要针对配置注释的使用,但我将使用 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: Gedmo\Translatable\Entity
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 中定义了一个实体:
Foo\ContentBundle\Entity\Article:
type: entity
repositoryClass: Foo\ContentBundle\Repository\ArticleRepository
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
来生成实体类,并手动添加了语言环境属性和设置器:
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/Translatable/Entity/Translation.orm.yml”的类“Gedmo\Translatable\Entity\Translation”的映射文件。
异常引用的 YAML 文件在它正在查找的路径中不存在,我也无法在其他任何地方找到它。
有人对我哪里出错有任何想法吗?
更新:经过进一步调查...
运行php app/console doctrine:mapping:info
显示我的所有实体,没有任何与翻译相关的内容,但是,如果我更新文件的gedmo_translatable:
一部分app/config/config.yml
并更改type: yml
为type: annotation
然后再次运行命令,我会列出以下内容:
[OK] Gedmo\Translatable\Entity\MappedSuperclass\AbstractTranslation
[OK] Gedmo\Translatable\Entity\Translation
[OK] Gedmo\Translatable\Entity\MappedSuperclass\AbstractPersonalTranslation
此时,我可以更新我的架构,并且我有一个新ext_translations
表。但是,在使用我的实体时,没有任何东西被插入其中,大概是因为它现在期望通过注释而不是 YAML 进行配置,将我的配置更改回type: yml
开始再次抛出异常,正如预期的那样。