Bonjour à tous,

Je découvre le développement avec Symfony et après quelques jours d'utilisations, je rencontre un problème pour internationaliser mes tables Doctrine.

Tout d'abord, je vais vous exposer la situation:
Mon site a pour but d'afficher des voyages.
Chaque voyages est associé à une liste de pays (par une table de liaison)

Voici la structure de mes tables:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
Continent:
   tableName: Continent
   actAs:
      I18n:
         fields: [nom]
   columns:
      id:   { type: integer(3), unsigned: true, primary: true, autoincrement: true }
      nom:  { type: string(15), notnull: true }
 
 
Pays:
   tableName: Pays
   columns:
      id:                  { type: integer(4), unsigned: true, primary: true, autoincrement: true }
      continent_id:        { type: integer(3), unsigned: true, notnull: true }
      sous_continent_id:   { type: integer(4), unsigned: true }
      iso:                 { type: string(2) }
      nom:                 { type: string(100), notnull: true }
   relations:
      Continent:           { onDelete: CASCADE, local: continent_id, foreign: id }

Dans la classe Voyage, je récupère la liste des pays puis pour chaque pays je récupère le continent. Pour cela j'ai créé une méthode dans la classe ContinentTable (est-ce correct ou y a-t-il plus simple?):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
foreach($paysList->execute() as $pays)
{
	$continents[] = Doctrine_Core::getTable('Continent')->getContinentByIdAndCulture($result->pays_id, 'fr');
}
Et voici ma méthode:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public function getContinentByIdAndCulture($id, $culture = 'es')
{
	$q = $this->createQuery('c')
		->select('c.id, t.nom as nom')
		->leftJoin('c.Translation t')
		->andWhere('t.id = ?', $id)
		->andWhere('t.lang = ?', $culture);
 
	foreach($q->execute() as $c)
	{
		$continent = $c->nom;
	}
 
	return $continent;
}
Dans cette méthode si je ne spécifie pas d'alias au champ nom, je n'arrive pas à le récupérer. Est-ce normal??


Cela fonctionne plus ou moins, mais je voudrai vraiment adopter les bonnes méthodes de travail liées à ce Framework.

Mon autre problème est lié à la culture. Je n'arrive pas à récupérer la culture automatiquement? Dois-je la définir dans chaque contrôleur?


Davance, merci à tous pour vos remarques et conseils.
Hervé