Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-06-2008 09:58:02

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

[Module] Faut il gérer toutes les routes manuellement ??

Bonjour à toutes et à tous,

je m'explique, j'ai une structure de la forme suivante :

/config
/modules
     /backoffice
           /...
     /front
          /controllers
               IndexController.php
               ServicesController.php
          /views
               /scripts
                    /index
                         index.phtml
                    /services
                         index.phtml

Et de nombreux autre modules et controllers dont je ne vous ferai pas le détails, pour ne pas étendre le post inutilement. Le principe est là.

Dans le bootstrap, en suivant les conseil de la documentation, j'ai peu ou prou ceci :

...

Code:

/**
 * Gestion des routes du frontoffice
 */
$router = new Zend_Controller_Router_Rewrite();

$services1Array = array(
'module'=>'front',
'controller'=>'services',
'action'=>'action1');
$services1Route = new Zend_Controller_Router_Route('services/action1',$services1Array);

$services2Array = array(
'module'=>'front',
'controller'=>'services',
'action'=>'action2');
$services2Route = new Zend_Controller_Router_Route('services/action2',$services2Array);

$services3Array = array(
'module'=>'front',
'controller'=>'services',
'action'=>'action3');
$services3Route = new Zend_Controller_Router_Route('services/action3',$services1Array);

...

$router->addRoute('services1',$services1Route);
$router->addRoute('services2',$services2Route);
$router->addRoute('services3',$services3Route);
...

$frontController->setRouter($router);


$frontController->setControllerDirectory(
     array(
          'default'        => $global->path->root . 'modules/front/controllers',
          'backoffice'    => $global->path->root . 'modules/backoffice/controllers'
     )
);

// Define module path
$frontController->addModuleDirectory($global->path->root . 'modules');

Alors ma question est la suivante, est ce que pour chaque module, chaque action ajouté il faut venir gérer la route dans le bootstrap ? Ou est il possible d'automatiser cette séquence ? Car sinon, cela peut assez vite devenir très lourd ?

Merci de vos retours d'expériences sur la question.

Cordialement,
elkolonel

Dernière modification par Mr.MoOx (24-06-2008 15:12:05)

Hors ligne

 

#2 24-06-2008 11:38:39

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [Module] Faut il gérer toutes les routes manuellement ??

Dans la mesure ou tu as définis "addModuleDirectory" normalement tu n'as pas besoin de gerer les routes tout court hmm

il faut juste que tu ais un module "default" pour ton affichage par defaut, donc l'index de ton application, ensuite toutes les routes sont gérées par le framework

Edit

Voici un petit print_screen de mon bootstrap, sur le coté tu peux voir que j'utilise quasi la meme architecture que toi et comme tu peux le voir la seule route que j'ai définie c'est celle pour gérer les langues.

http://pix.nofrag.com/1/3/7/9e692de71ff0874ee1d50eb4dadfat.jpg

Dernière modification par Asfaloth (24-06-2008 11:45:32)


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#3 25-06-2008 14:51:46

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: [Module] Faut il gérer toutes les routes manuellement ??

Merci Asfaloth, effectivement, je m'étais à priori compliqué la vie pour pas grand chose... lol

Hors ligne

 

#4 25-06-2008 16:36:11

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Module] Faut il gérer toutes les routes manuellement ??

Avec une telle route, ça veut quand même bien dire que quelque soit l'url entrée, tu vas rediriger sur ton action index du controller index avec la langue anglaise. Donc toutes les pages pointeront sur la même chose non ?

Hors ligne

 

#5 25-06-2008 16:54:37

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [Module] Faut il gérer toutes les routes manuellement ??

Non pas du tout, cela veut dire que SI on a pas spécifier la langue, il utilisera la langue anglaise.

ce sont les valeurs par défaut si aucune autres n'est fournie à la place.


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#6 30-06-2008 21:52:00

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Module] Faut il gérer toutes les routes manuellement ??

Ok pour les valeurs par défaut, merci smile

Hmm... Mais si tu ne spécifies pas de langue, comment le système sait qu'il manque la langue ?
Il ne va pas faire un décalage ?

C'est à dire prendre le module comme langue, le controller comme module, et ainsi de suite ?

Et une légère question qui peut être similaire. A partir du moment où on a un système en module, est-ce qu'il faut obligatoirement mettre le default dans l'url où est-ce qu'on est pas obligé ? Dans le deuxième cas, comment il sait que c'est le module défault dans une certaine url ?)
ex : monsite.com/cont/action
Comment sait-il que c'est le module "default" et pas le module "conct" ?

Hors ligne

 

#7 26-01-2009 22:16:30

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [Module] Faut il gérer toutes les routes manuellement ??

Bonsoir,

J'ai suivi la structure de Asfaloth, seulement il me manque quelques éléments pour faire fonctionner le tout:

-je me suis créer un module "back" avec donc un dossier controller etc (copie conforme du répertoire default),
seulement, quand je rentre l'url suivante : http://localhost/back/index, il me dit que le controller back_index n'existe pas.
J'ai pourtant bien ajouté le nouveau dossier de controller au front.

-Si j'arrive à résoudre ce problème, j'aimerais bien savoir comment on fait pour définir un layout en fonction des modules.

Je penses qu'il me manque quelques notions essentielles à la compréhension du traitement des requêtes.


Merci de me donner un exemple.

Hors ligne

 

#8 27-01-2009 15:17:18

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [Module] Faut il gérer toutes les routes manuellement ??

Salut,

Est-ce que tu as nommé ton controlleur correctement ?

Ici ça serait  back_indexController...


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#9 27-01-2009 19:04:53

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [Module] Faut il gérer toutes les routes manuellement ??

Merci, s'était cela mon problème, je n'avais pas lu la doc correctement désolé.

Tant que j'y suis je me permet de poser une autre question, comment assigner un layout différent par module ?


Merci

Hors ligne

 

#10 27-01-2009 19:08:42

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Module] Faut il gérer toutes les routes manuellement ??

hmmm..
Par défaut, ce n'est "possible".
Il faut utilisé un appel preDispatch..


----
Gruiiik !

Hors ligne

 

#11 27-01-2009 19:28:54

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [Module] Faut il gérer toutes les routes manuellement ??

Petite explication théorique de la mise en place avec le pre-dispatch ?


Merci

Hors ligne

 

#12 15-07-2009 15:44:07

podo
Membre
Date d'inscription: 29-06-2009
Messages: 18

Re: [Module] Faut il gérer toutes les routes manuellement ??

Bonjour. Je reveil ce topic pour demander a quelqun s'il peut me montrer comment mettre en place un tel systeme modulaire ???

A vrai dire ce topic repond pile a mon probleme seulement ... Sans le screen de Asfaloth j'ai un peu de mal a visualiser la chose smile

Hors ligne

 

#13 16-07-2009 10:46:37

EffigieCreations
Membre
Date d'inscription: 12-06-2009
Messages: 33
Site web

Re: [Module] Faut il gérer toutes les routes manuellement ??

Pour pouvoir utiliser des modules il faut juste le préciser dans le bootstrap :

Code:

$frontController->addModuleDirectory('./application/modules');

Pour approfondir un peu le sujet, tu peux regarder les instructions suivantes :

Code:

// en cas d'erreur dans l'url ça affiche le controller par défaut
$frontController->setParam('useDefaultControllerAlways', true); 

// Définition du module par défaut
// Pour que le module "front" soit affiché lorsque tu affiche ton site (www.example.com)
$dispatcher = $frontController->getDispatcher();
$dispatcher->setDefaultModule('front');
$frontController->setDispatcher($dispatcher);

// Pour toujours indiquer le nom du module dans les controllers (ex : Front_IndexController)
// afin de résoudre les problèmes liés à l'instruction du dessus
$frontController->setParam('prefixDefaultModule', true);

Julien.

Dernière modification par EffigieCreations (16-07-2009 10:47:06)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages