5

https://github.com/stof/StofDoctrineExtensionsBundleをインストールし、Countryエンティティの特定のフィールドでTranslatableとSluggableの両方を使用しています。

...
class Country
{
    ...
    /**
     * @Gedmo\Translatable
     * @Gedmo\Slug(fields={"name"})
     * @ORM\Column(length=255, nullable=false)
     */
    private $slug;

ページのURLは、英語ユーザーの場合は... / country / france、ドイツ語ユーザーの場合は... / land/frankreichである必要があります。

コントローラで、特定の言語でスラッグを取得し、国のエンティティを取得するこのロケール固有のスラッグでフィルタリングします。

私はここやドキュメントでそれを行う方法について何も見つけていません。

それを解決する方法についてのヒントをありがとう!

4

1 に答える 1

3

このブログ記事で解決策を見つけました。解決策は、TranslationWalkerのORMクエリヒントを使用して翻訳テーブルを自動的に結合することです。これにより、翻訳されたフィールドで並べ替えたり、フィルタリングしたりできます。これは素晴らしい!

コードは次のようになります。

...
->createQuery('SELECT...FROM MyFooBundle:Country c WHERE c.slug = :slug...)
->setParameter('slug', $slug)
->setHint(
    \Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
    'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
)
->getSingleResult();

ちなみに、フォールバックを使用する場合(つまり、特定の翻訳が利用できない場合は、デフォルトの文字列/テキストを使用します)、setTranslationFallbackメソッド呼び出し(doctrine_extensions.yml内)を使用してgedmo.listener.translatableサービス用に構成します。 。

于 2013-02-04T18:21:54.753 に答える