Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-07-2007 18:14:52

capharnaeum
Membre
Date d'inscription: 03-07-2007
Messages: 14

un MVC un peu particulier

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


Hacker vaillant, rien d'impossible !

Hors ligne

 

#2 19-07-2007 08:03:18

capharnaeum
Membre
Date d'inscription: 03-07-2007
Messages: 14

Re: un MVC un peu particulier

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 :

Code:

<?php
$front->setControllerDirectory(array(
      'default' => '/path/to/application/controllers',
      'blog'    => '/path/to/application/blog/controllers'
));
?>

moi pour que ca fonctionne j'ai du mettre :

Code:

<?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)


Hacker vaillant, rien d'impossible !

Hors ligne

 

#3 19-07-2007 09:52:51

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: un MVC un peu particulier

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

 

#4 19-07-2007 12:08:30

capharnaeum
Membre
Date d'inscription: 03-07-2007
Messages: 14

Re: un MVC un peu particulier

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 :

Code:

...

#.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 ?


Hacker vaillant, rien d'impossible !

Hors ligne

 

#5 19-07-2007 13:10:35

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: un MVC un peu particulier

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

 

#6 19-07-2007 13:59:10

capharnaeum
Membre
Date d'inscription: 03-07-2007
Messages: 14

Re: un MVC un peu particulier

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 cool je vais pouvoir avancer, encore merci de ton aide, je clos le thread wink


Hacker vaillant, rien d'impossible !

Hors ligne

 

#7 20-07-2007 11:11:27

sam
Membre
Lieu: Nancy
Date d'inscription: 22-05-2007
Messages: 16

Re: un MVC un peu particulier

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

 

#8 20-07-2007 17:01:17

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: un MVC un peu particulier

Si tu utilises le addController, il faut lui indiquer chaques répertoires contenant des controllers.

ex pour 2 modules

Code:

$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

Code:

$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

 

#9 23-07-2007 13:48:34

sam
Membre
Lieu: Nancy
Date d'inscription: 22-05-2007
Messages: 16

Re: un MVC un peu particulier

Est-ce la seule différence ?

Hors ligne

 

#10 24-07-2007 08:34:48

capharnaeum
Membre
Date d'inscription: 03-07-2007
Messages: 14

Re: un MVC un peu particulier

Salut

perso a part l'économie du repertoire "/controllers" je n'en vois pas d'autres

j'utilise une structure modulaire juste avec setControllerDirectory


Hacker vaillant, rien d'impossible !

Hors ligne

 

#11 24-07-2007 10:51:40

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: un MVC un peu particulier

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

 

#12 25-07-2007 11:03:41

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: un MVC un peu particulier

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

 

#13 25-07-2007 14:22:52

capharnaeum
Membre
Date d'inscription: 03-07-2007
Messages: 14

Re: un MVC un peu particulier

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 :

Code:

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...


Hacker vaillant, rien d'impossible !

Hors ligne

 

#14 25-07-2007 16:59:23

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: un MVC un peu particulier

le chemin de l'application est-il contenu dans une constante ou ailleurs ?
Si oui on pourrait faire dans le controlleur :

Code:

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

 

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