2013-02-01 4 views
5

私はhttps://github.com/stof/StofDoctrineExtensionsBundleを設置し、国のエンティティの特定のフィールドに翻訳可能とコードはSluggableの両方を使用していますDoctrineExtensionsからTranslatableとSluggableを組み合わせるには?

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

ページのURLは、/英語のユーザーのために... /国/フラ​​ンスなると...はずですドイツのユーザーのためのland/frankreich

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

ここで、またはそれを行う方法に関するドキュメントで何も見つかりませんでした。

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

答えて

3

ちょうどsolution in this blog articleが見つかりました。解決策は、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(); 

コードは、その後のようになりますあなたが、フォールバックを使用したい場合は、単にのためにそれを設定し、(具体的な翻訳が利用できない場合、すなわち、デフォルトの文字列/テキストを取ります)あなたのgedmo.listener.translatableサービスをsetTranslationFallbackメソッド呼び出し(doctrine_extensions.yml内)で実行します。

関連する問題