Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 30-01-2009 16:40:23

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Architecture multi application

Bonjour à tous,

J'ai une application de base mais qui va me servir a réaliser plusieurs autres applications quasi identique structure bdd, controllers. Ce qui va être différents c'est certaines vues et le contenu BDD et quelques controllers.

Comment gérer ça efficacement ? En sachant que j'aimerais en gros avoir un rep par application et un rep common. En gros tous ce qui est commun est dans common genre, ZF, les controllers, quelques vues ...

Mais je vois pas trop comment faire coté ZF pour qu'il switch de lui même d'un controller a un autre selon la demande ...

En gros si le controller, la vue ou le model existe pas dans le rep de l'application il va le chercher dans le common.
Mais apprement on peux pas donner plusieurs directory de modules et donc de controllers et vues .... help !! comment faire ?

En gros c comme si on avait x fois la mm architecture. Par defaut je vais dans l'appli demandée si je trouve pas je vais dans common ceci pour le controller, la vue, le model .... Et selon la demande je peux avoir pris le controller dans common et le model et la vue dans l'app.

Je vois pas du tout comment faire ....

Dernière modification par Moimeme (30-01-2009 17:05:34)

Hors ligne

 

#2 01-02-2009 10:07:45

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: Architecture multi application

Ca inspire personne ou j'ai pas été clair ?

Hors ligne

 

#3 01-02-2009 14:39:40

neni
Membre
Lieu: Nantes
Date d'inscription: 12-11-2007
Messages: 27

Re: Architecture multi application

S'il faut que quelqu'un te le dise, je vais le faire: "non, ce n'est pas très clair". je vais quand même essayer de te donner des pistes (à défaut de solutions).
Si tu passes par un boostrap différent pour chaque "application", il est possible de faire quelque chose.

Pour les modèles de BDD, il suffit de mettre les chemins d'accès dans le set_incluse_path (le chemin local avant le chemin commun).

Pour les vues, il est possible d'indiquer les chemins de recherche des templates (là, il faut mettre le local à la fin) en utilisant view->addScriptPath(). Dans un projet, j'utilise un Personnel_Controller_Action (hérité de Zend_Controller_Action) dont héritent ensuite tous mes contrôleurs (cela doit aussi être faisable avec plugin ou par d'autres moyens). Il permet (entre autre) de chercher les vues d'abord dans un répertoire local (particulier au site), puis dans celui du module. Cela ressemble à cela:

Code:

class Personnel_Controller_Action extends Zend_Controller_Action
{
    public function preDispatch()
    {

        parent::preDispatch();
                
        // les chemins des vues
        $this->view->setScriptPath(ROOT_PATH . './application/modules/' . $this->getRequest()->getModuleName() . '/views' );
        $this->view->addScriptPath( ROOT_PATH . './application/local/views/' . $this->getRequest()->getModuleName() );

    }
}

Enfin, pour les contrôleurs, il doit être possible d'utiliser le Zend_Controller_Front pour indiquer le chemin de recherche des contrôleurs: $frontController->addControllerDirectory( CHEMIN_REPERTOIRE, NOM).

Mais, ce ne sont que des pistes, ce n'est pas forcement très élégant et les solutions les plus pertinentes.

Dernière modification par neni (01-02-2009 14:45:14)

Hors ligne

 

#4 02-02-2009 21:55:42

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: Architecture multi application

Pour les models et les vues en effet ta solution donne satisfaction.
En revanche pour les controllers a cause des modules impossible de les debrailler.
En effet j'ai utilisé addModuleDirectory du coup j'ai bien les controllers mais il ne veux pas avoir plusieurs fois le mm nom de module. Et si il trouve pas le controller dans le module il balance une exeption il chercher pas ailleurs.
J'aimerais avoir le mm comportement qu'un include path. En gros il va me chercher les controllers dans un rep et si il n'y ai pas il va voir dans un autre. Une idée ?
Comme ca j'arriverai a avoir un truc completement debraillable. Genre je choisi d'utiliser le controller de l'appli, la vue du common et le model de l'appli. Ou le controller du common, la vue et le model de l'appli ... en gros totale flexibilité et capitalisation du code. Par defaut le common et des que j'ai besoin de changer un truc je le met dans l'appli et il prend le pas sur le common.

Dernière modification par Moimeme (02-02-2009 21:58:11)

Hors ligne

 

#5 03-02-2009 14:47:25

neni
Membre
Lieu: Nantes
Date d'inscription: 12-11-2007
Messages: 27

Re: Architecture multi application

Comme je suis curieux et que j'aurai certainement besoin de cela, j'ai cherché un peu. C'est beaucoup plus simple que ce que je pensais.

Avant, l'initiation de mes modules se faisait ainsi:

Code:

foreach ($config->modules as $module){
    $frontController->addControllerDirectory(ROOT_PATH . './application/modules/' . $module . '/controllers' , $module);
}

Mais il y a plus simple (si tous les modules sont dans le même répertoire et pas besoin de les  renommer) et qui permet de faire ce que tu veux (le local doit être mis à la fin):

Code:

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

Dernière modification par neni (03-02-2009 15:24:21)

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