Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2010, 23h14   #1
Membre régulier
 
Inscription : mars 2002
Messages : 204
Détails du profil
Informations personnelles :
Localisation : Tunisie

Informations forums :
Inscription : mars 2002
Messages : 204
Points : 77
Points : 77
Par défaut ZF1.11 - Route et Site multilingue

Mon application utilise le routage et un plugin de traduction selon le modèle suivant :

bootstrap.php
Code :
1
2
3
4
5
6
7
protected function _initRouter(){
    $this->bootstrap('frontController');
    $front = $this->getResource('frontController');
    $router = $front->getRouter();
    $router->addConfig(new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes');
    return $router;
}
routes.ini
Code :
1
2
3
4
5
6
routes.acceuil.type = "Zend_Controller_Router_Route"
routes.acceuil.route = ":language/acceuil"
routes.acceuil.defaults.module = frontend
routes.acceuil.defaults.controller = index
routes.acceuil.defaults.action = index
routes.acceuil.defaults.language = fr
J'utilise également un plugin d'authentification qui vérifie dans une bd si l'utilisateur a accès à la ressource demandée. Une ressource, bien évidemment, est définie par le triplet (Module, Controleur, Action)

Quand je saisis, http://localhost/fr/acceuil ou http://localhost/en/acceuil ça marche normalement.

Quand je saisis http://localhost/fr/frontend/index/index le plugin d'authentification me redirige vers la page d'authentification. Cela veut dire qu'il n'a pas bien interprété l'URL et donc il n'a pas reconnu le triplet (Module, Controleur, Action)=(Frontend, index,index).
ZIED est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 17h24   #2
Invité de passage
 
Étudiant
Inscription : juin 2007
Messages : 1
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 1
Points : 1
Points : 1
Envoyer un message via MSN à stormblow
Bonjour,

Avez-vous trouvé une solution à votre problème? Ou une autre manière d'aborder le sujet?
Merci.
stormblow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 09h13   #3
Membre régulier
 
Inscription : mars 2002
Messages : 204
Détails du profil
Informations personnelles :
Localisation : Tunisie

Informations forums :
Inscription : mars 2002
Messages : 204
Points : 77
Points : 77
Citation:
Envoyé par stormblow Voir le message
Bonjour,
Avez-vous trouvé une solution à votre problème? Ou une autre manière d'aborder le sujet?
Merci.
Malheureusement je n'ai pas de solution.
ZIED est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 10h13   #4
Membre régulier
 
Inscription : juin 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 66
Points : 86
Points : 86
C'est normal, il détecte le module "fr".

J'ai réussi à trouver une solution en créant une route chainée.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
; route par défaut
 
resources.router.routes.defaultmodule.type = Zend_Controller_Router_Route_Module
resources.router.routes.defaultmodule.abstract = Off
resources.router.routes.defaultmodule.defaults.module = "default"
resources.router.routes.defaultmodule.defaults.controller = "index"
resources.router.routes.defaultmodule.defaults.action = "index"
 
resources.router.routes.language.type = Zend_Controller_Router_Route
resources.router.routes.language.route = ":language"
resources.router.routes.language.reqs.language = "^(fr|en)$"
resources.router.routes.language.defaults.module = "default"
resources.router.routes.language.defaults.controller = "index"
resources.router.routes.language.defaults.action = "index"
 
; route perso
routes.acceuil.type = "Zend_Controller_Router_Route"
routes.acceuil.route = ":language/acceuil"
routes.acceuil.defaults.module = frontend
routes.acceuil.defaults.controller = index
routes.acceuil.defaults.action = index
routes.acceuil.defaults.language = fr
resources.router.routes.default.type = Zend_Controller_Router_Route_Chain
resources.router.routes.default.chain = "language, defaultmodule"
Pense à ajouter tes langues.
Blount est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 17h11   #5
Rédacteur
 
Avatar de Bakura
 
Homme Michaël
Étudiant
Inscription : septembre 2005
Messages : 1 367
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 22
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2005
Messages : 1 367
Points : 2 701
Points : 2 701
Salut,

J'ai un soucis avec ça. J'ai grosso modo les mêmes routes que toi Blount, sauf que moi je dois traduire mes routes (pour le moment uniquement controller et action, mais sûrement module aussi après), il faut donc ajouter un :@ devant.

Le soucis c'est que le seul type de route qui accepte les traductions est la route de type Zend_Controller_Router_Route, dans lequel je dois mettre comme route :

:lang/:module/:@controller/:@action

Ce qui signifie que je ne peux plus chaîner mon Zend_Controller_Router_Route_Module avec le Zend_Controller_Router_Route (le module n'est pas reconnu).

J'ai trouvé une solution qui marche mais qui ressemble plus à du hack qu'à une solution propre, en l'occurence créer deux routes : une sans module (cas du module default), et une avec module. Le soucis c'est que je suis obligé de recopier les différents paramètres (notamment les reqs de language), pas très propre quoi.
Bakura est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h56.


 
 
 
 
Partenaires

Hébergement Web