Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour
j'ai un petit soucis pour démarrer, je réalise un site un peu bizarre j'avoue mais c'est le boulot.
j'ai une appli web en 3 modules :
/app1
/module1
/controllers
/models
/views
/module2
/controllers
/models
/views
/module3
/controllers
/models
/views
j'ai un repertoire de boot :
/root
/app1
/index.php
l'application a autant de design (css, images ...) que de clients, donc une application avec des css qui changent selon l'url qui est saisie, exemple
le client1 tape : http://app1-client1.com
le client2 tape : http://app1-client2.com
etc...
1ere question : je ne vois pas dans l'objet Zend_Controller_Front comment analyser l'url que je reçois, je me vois bien le faire avec les fonctions classiques de php, mais avec les fonction zend, y a t il une meilleure methode
2eme question : dans le front je dispatche vers le bon module, mais comment envoyer les paramètres du client, par l'objet request ou dans l'url style : http://app1-client1.com/module1/control … cle/valeur ?
merci de vos réponses
Hors ligne
Bonjour
je me réponds pour une partie
j'ai suivi la partie découpage en module avec
/app1
/default
/controllers
/models
/views
/module1
/controllers
/models
/views
/module2
/controllers
/models
/views
/module3
/controllers
/models
/views
dans mon front je rajoute les controllerdirectory et ca marche impec sauf le default, dans la doc ils disent de mettre pour l'exemple du blog :
<?php $front->setControllerDirectory(array( 'default' => '/path/to/application/controllers', 'blog' => '/path/to/application/blog/controllers' )); ?>
moi pour que ca fonctionne j'ai du mettre :
<?php $front->setControllerDirectory(array( 'default' => '/path/to/application/default/controllers', 'blog' => '/path/to/application/blog/controllers' )); ?>
bref a part cela ca fonctionne nickel
reste la partie "arrivée"
je vois pas comment faire dans le front pour analyser l'url et selon le client mettre dans le registry l'IDClient qui lui correspond pour aller à chaque fois lui mettre la bonne css
alors j'ai pensé à mettre un front par client comme cela je me casse pas la tête mais c'est pas propre
j'ai aussi l'idée de faire un test de $_SERVER["HTTP_HOST"] là c'est propre mais est-ce que ça craint pas trop au niveau sécurité, certaines variables globales sont représentent des menaces.
auriez vous un début d'idée à me soumettre ?
encore merci.
Dernière modification par capharnaeum (19-07-2007 08:30:14)
Hors ligne
J'avais remarqué la meme chose que toi concernant le default. Mais je suis rapidement passé a la solution alternative que je trouve plus propre qui consite a mettre tout les modules dans un répertoire modules
et a utiliser $frontController->addModuleDirectory('path/vers/le/rep/modules');
Concernant ton analyse d'url: Dans le front l'analyse n'a pas encore eu lieu. Elle est en revanche disponible avant le dispatch. Tu peux donc soit faire un plugins, soit faire un action helper et dans les 2 cas, implémenter la fonction preDispatch() où tu peux mettre dans la registry ce que tu veux en fonction du contexte.
Néanmoins, une remarque. Ce qui est analysé par le front, c'est le path de l'url, hors dans ton cas, c'est le host qui change. Je pense donc qu'il faut gérer ca plutot coté apache avec un rewriting d'url et transformer le host en parametre destiné au front au niveau clé/valeur
Hors ligne
Merci beaucoup de ta réponse
pour l'organisation des modules, c'est vrai que ça à l'air encore plus propre comme ça.
pour le host de l'url j'ai pensé à cela au niveau du front :
... #.selection du client switch($_SERVER["HTTP_HOST"]) { case "www.client1.fr" : $IDClient = 1; break; case "www.client2.fr" : $IDClient = 2; break; default : $IDClient = 0; break; } Zend_Registry::set("IDClient",$IDClient); #.on dispatche $front->dispatch();
cette solution me plaît car je vais gérer un fichier de config pour mieux gérer mes clients
le framework à l'ai tellement riche et bien pensé qu'en ne trouvant rien sur la partie host de l'url je me suis tourné vers vous pensant que j'avais loupé quelque chose.
pour ta solution du predispatch ca m'oblige à faire une verife a chaque controller ? ou bien j'implement ma propre Zend_Controller_Action ?
Hors ligne
Si c'est un plugin ou un helper, non, preDispatch() est automatiquement appelé par le dispatcher avant de donner la main a l'action.
Néanmoins, la solution que tu proposes basée associée à un fichier de config me semble tout à fait correcte.
Hors ligne
ok, je comprends mieux, je n'en suis pas encore à utiliser un plugin ou un helper, je vois à peu près leur principe, je vais m'y plonger un peu plus, pour l'instant cette solution du switch me convient assez et n'a pas l'air de susciter des critiques, c'est cool je vais pouvoir avancer, encore merci de ton aide, je clos le thread
Hors ligne
Bonjour,
Je n'arrive pas trop à faire la différence entre :
$frontController->addControllerDirectory('/path/to/application/news/controllers', 'news');
et :
$frontController->addModuleDirectory('path/vers/le/rep/modules');
Pouvez-vous m'éclairer ?
Hors ligne
Si tu utilises le addController, il faut lui indiquer chaques répertoires contenant des controllers.
ex pour 2 modules
$frontController->setControllerDirectory( array ( 'default' => 'apps\modules\default\controllers', 'module1' => 'apps\modules\module1\controllers', ));
Si tu utilises addModules, tu n'indiques que le répertoires où se trouve les modules, le ZF trouvera le path vers les controllers seul.
meme exemple
$frontController->addModuleDirectory('apps\modules');
Tu peux aussi faire plusieurs addModules si tu as plusieurs emplacement où tu as des modules.
Dernière modification par TiTerm (20-07-2007 23:24:06)
Hors ligne
Est-ce la seule différence ?
Hors ligne
Salut
perso a part l'économie du repertoire "/controllers" je n'en vois pas d'autres
j'utilise une structure modulaire juste avec setControllerDirectory
Hors ligne
Peut etre la souplesse...
Si demain tu ajoutes un nouveau module, tu n'as pas à mettre à jour le bootstrap pour completer le tableau que tu passe à setControllerDirectory()
Hors ligne
Bonjour à tous,
J'ai opté pour la meme architecture.
J'ai un petit soucis : avec addModuleDirectory le framework s'en sors tres bien pour les controlleurs, mais pour les models ?
J'ai du ajouter Manuellement avec set_include_path() les chemins vers les models de chaque module.
Y-a-t-il une facon plus propre de procéder pour les répertoires models ?
Hors ligne
Bonjour
en effet j'ai le même souci avec mes models, je dois faire des includes sachant que mon include se fait a peut pres comme cela :
require_once("../../application/module/models/model1.php");
car je me situe dans le repertoire html.
j'ai cherché mais sans trouver une methode plus simple.
dans les exemples sur internet ils font des includes avec le path entier...
Hors ligne
le chemin de l'application est-il contenu dans une constante ou ailleurs ?
Si oui on pourrait faire dans le controlleur :
function init(){ ... Zend_Loader::loadClass('ActuManager',APPLICATION_PATH.'modules/NomModule/models/'); Zend_Loader::loadClass('Actu',APPLICATION_PATH.'modules/NomModule/models/'); ... }
ce qui permet d'avoir le controlleur du module qui a connaissance de son modele sans configuration dans le bootstrap ou ailleurs.
Dernière modification par ichevc02 (25-07-2007 17:00:31)
Hors ligne