Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 :
...
/** * 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
Dans la mesure ou tu as définis "addModuleDirectory" normalement tu n'as pas besoin de gerer les routes tout court
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.
Dernière modification par Asfaloth (24-06-2008 11:45:32)
Hors ligne
Merci Asfaloth, effectivement, je m'étais à priori compliqué la vie pour pas grand chose... lol
Hors ligne
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
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.
Hors ligne
Ok pour les valeurs par défaut, merci
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
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
Salut,
Est-ce que tu as nommé ton controlleur correctement ?
Ici ça serait back_indexController...
Hors ligne
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
hmmm..
Par défaut, ce n'est "possible".
Il faut utilisé un appel preDispatch..
Hors ligne
Petite explication théorique de la mise en place avec le pre-dispatch ?
Merci
Hors ligne
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
Hors ligne
Pour pouvoir utiliser des modules il faut juste le préciser dans le bootstrap :
$frontController->addModuleDirectory('./application/modules');
Pour approfondir un peu le sujet, tu peux regarder les instructions suivantes :
// 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