2013-02-01 5 views
5

Ich habe https://github.com/stof/StofDoctrineExtensionsBundle installiert und sowohl Übersetzbare und Sluggable auf einem bestimmten Gebiet in einem Land Unternehmen verwenden:Wie kombiniere ich Translatable und Sluggable aus DoctrineExtensions?

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

Die URL einer Seite sollte .../Land/Frankreich für englische Benutzer sein und .../Land/Frankreich für deutsche Nutzer.

In einem Controller bekomme ich den Slug in der spezifischen Sprache und gefiltert von diesem locale-spezifischen Slug Ich möchte eine Land-Entity abrufen.

Ich habe hier und in den Dokumenten nichts gefunden, wie man das macht.

Danke für irgendeinen Hinweis, wie man das löst!

Antwort

3

Nur gefunden solution in this blog article. Die Lösung verwendet den ORM-Query-Hinweis des TranslationWalker, um automatisch der Übersetzungstabelle beizutreten, sodass Sie nach jedem übersetzten Feld sortieren oder filtern können. Das ist toll!

Der Code sieht dann so etwas wie:

... 
->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(); 

Durch die Art und Weise: Wenn Sie Rückfall verwenden möchten (dh, wenn keine spezielle Übersetzung verfügbar ist, nehmen Sie die Standard-String/Text), dann konfigurieren nur für Ihr gedmo.listener.translatable-Dienst über den Methodenaufruf setTranslationFallback (in doctrine_extensions.yml).

Verwandte Themen