一言で言えば
Symfony2 / Doctrine2アプリを作成していて、YAMLを使用してStofDoctrineExtensionsBundleによって提供されるTranslatable拡張機能をインストールして構成しましたが、追加の翻訳テーブルは生成されず、翻訳可能なプロパティを持つエンティティを操作しようとすると、次の例外がスローされます。
クラス「Gedmo\Translatable \ Entity\Translation」の「/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity/Translation.orm.yml」という名前のマッピングファイルが見つかりません。
さらに詳細に
StofDoctrineExtensionsBundleによって提供されるSymfony2/Doctrine2アプリケーションでTranslatable拡張機能を機能させようとしていますが、入手可能なドキュメントのほとんどは、主に構成用のアノテーションの使用を対象としていますが、それは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
を実行してエンティティクラスを生成し、localeプロパティとsetterを手動で追加しました。
class Article
{
/* ... */
private $locale;
public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
/* ... */
}
を実行した後php app/console doctrine:schema:update --force
、私の記事テーブルはその関連付けとともに作成されますが、翻訳に関連するものは何もありません(このためにテーブルが作成されることになっていると思います...)
次に、翻訳可能なエンティティを操作すると、例外が発生します。
クラス「Gedmo\Translatable \ Entity\Translation」の「/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity/Translation.orm.yml」という名前のマッピングファイルが見つかりません。
例外が参照している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
、期待どおりに例外が再度スローされ始めます。