Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-02-2008 17:34:42

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

Arborescence à utiliser

Bonjour,

J'ai une question concernant l'arborescence à adopter sur un projet.

Contexte :
Il s'agit d'un ensemble de questionnaires. Les questionnaires ont le même fonctionnement global (etape1, etape2, ... etapen), avec possibilité de revenir en arrière. Les questionnaires sont indépendants les uns des autres, mais utilisent des fonctionnalités communes (insertion en base, librairies communes pour la validation des champs obligatoires).
Le volume de questionnaires remplis est assez important.


Question :
J'aimerais utiliser le Zend Framework, qui me semble bien adapté pour ce contexte, mais j'ai 2 solutions possibles au niveau de l'arborescence.
Dans les 2 solutions, la librairie Zend sera commune à tous les questionnaires.

1) Chaque questionnaire correspond à une utilisation distincte du Zend Framework, dans des répertoires différents, et donc un index.php (bootstrap) spécifique.

/lib
   /Zend
   /Autre
/models
   +table.php
/questionnaires
  /questionnaire1
     +index.php (bootstrap)
     /controller
        /default
           +Etape1Controller.php
           +Etape2Controller.php
     /view
       /default
           +etape1.tpl
           +etape2.tpl

  /questionnaire2
     +index.php (bootstrap)
     /controller
        /default
           +Etape1Controller.php
           +Etape2Controller.php
     /view
       /default
           +etape1.tpl
           +etape2.tpl



2) Un seul fichier index.php, toujours appelé pour tous les questionnaires, chaque questionnaire correspondant à un module, et les etapes étant les actions de ces modules.

/lib
   /Zend
   /Autre
/models
   +table.php
/questionnaires
   +index.php
    /controller
        /questionnaire1
            +Etape1Controller.php
            +Etape2Controller.php
        /questionnaire2
            +Etape1Controller.php
            +Etape2Controller.php
            +Etape3Controller.php
   /view
        /questionnaire1
            +etape1.tpl
            +etape2.tpl
        /questionnaire2
            +etape1.tpl
            +etape2.tpl
            +etape3.tpl



La seconde solution me semble plus agréable à utiliser et plus "jolie", mais je me pose surtout des questions au niveau des performances.
Chaque questionnaire ayant un volume assez important par jour, si tout arrive sur la meme page index.php, est ce que ca peut avoir une influence négative sur les perf, ou bien est ce que je me pose des questions pour rien?

Merci d'avance !

Hors ligne

 

#2 05-02-2008 17:46:26

Phoenix17
Membre
Lieu: Nancy
Date d'inscription: 09-04-2007
Messages: 73
Site web

Re: Arborescence à utiliser

La seconde solution me semble plus agréable à utiliser et plus "jolie", mais je me pose surtout des questions au niveau des performances.
Chaque questionnaire ayant un volume assez important par jour, si tout arrive sur la meme page index.php, est ce que ca peut avoir une influence négative sur les perf, ou bien est ce que je me pose des questions pour rien?

Cela ne pas vraiment de réelle impact sur les perfs, à mon sens. Ce sera même plus facilement maintenable d'avoir qu'un seul et unique bootstrap plutôt que plusieurs (d'ailleurs, je crois même que ce ne soit pas possible d'avoir plusieurs bootstrap pour une même application : étant donné que le mod rewrite est censé rédiriger toute requête vers ton bootstrap : index.php.

La seconde solution me semble en effet la plus approprié à ta problèmatique.

Simon

Hors ligne

 

#3 06-02-2008 10:36:43

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

Re: Arborescence à utiliser

Bonjour,

Merci de ta réponse. Je pense également que la solution 2 est plus facile à maintenir. Ma seule crainte était pour les perfs, mais si il n'y a pas de problème, je vais partir sur cette solution.

Merci,

Laurent

Hors ligne

 

#4 06-02-2008 16:27:41

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Arborescence à utiliser

Je pense que tu en fait un peu trop pour ta deuxieme solution.
Jette un coup d'oeil à ça:
/lib
   /Zend
   /Autre
/application
    /models
       +table.php
    /controller
        /questionnaire1Controller.php
            +Etape1Action()
            +Etape2Action()
        /questionnaire2Controller.php
            +Etape1Action()
            +Etape2Action()
            +Etape3Action()
   /view
        /questionnaire1
            +etape1.tpl
            +etape2.tpl
        /questionnaire2
            +etape1.tpl
            +etape2.tpl
            +etape3.tpl

/public
    /css
    /img
    +index.php

C'est plus comme ça que ça marche il me semble smile
Cf le viewRenderer...

Hors ligne

 

#5 06-02-2008 17:46:40

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

Re: Arborescence à utiliser

Saeba a écrit:

/lib
   /Zend
   /Autre
/models
   +table.php
/questionnaires
   +index.php
    /controller
        /questionnaire1
            +Etape1Controller.php
            +Etape2Controller.php
        /questionnaire2
            +Etape1Controller.php
            +Etape2Controller.php
            +Etape3Controller.php
   /view
        /questionnaire1
            +etape1.tpl
            +etape2.tpl
        /questionnaire2
            +etape1.tpl
            +etape2.tpl
            +etape3.tpl

Alors moi j'aurai une question  : quelle sera l'url correspondante à questionnaire1/Etape1 ??
Est ce que questionnaire1 et questionnaire2 sont ce que l'on appelle des modules ??

Cordialement,
Elkolonel.

Hors ligne

 

#6 06-02-2008 17:50:41

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Arborescence à utiliser

url: questionnaire1/etape1/index
On peux dire que ouais ça passerait pour des modules dans cette conf, mais ce qui est bête c'est que les controllers ne comporteront qu'une action (index)... Mieux vaut ma proposition au dessus je pense utilisant juste des controllers avec une action/étape.

Hors ligne

 

#7 06-02-2008 18:16:20

Saeba
Membre
Date d'inscription: 05-02-2008
Messages: 31

Re: Arborescence à utiliser

Mr.MoOx a écrit:

url: questionnaire1/etape1/index
On peux dire que ouais ça passerait pour des modules dans cette conf, mais ce qui est bête c'est que les controllers ne comporteront qu'une action (index)... Mieux vaut ma proposition au dessus je pense utilisant juste des controllers avec une action/étape.

Mr.MoOx,


Merci de ta réponse également.
J'avais mis les questionnaires chacun dans un répertoire, car je peux avoir des fichiers spécifiques à un questionnaire particulier, par exemple une initialisation ou autre.

Par contre tu as raison, mon arbo était pas super. Mais je m'étais également mal exprimé dans mon schéma.
/questionnaire1
            +Etape1Controller.php
            +Etape2Controller.php
Ca correspondait en fait à un dossier questionaire 1, avec 2 fichiers controleurs : Etape1Controlleur.php et Etape2Controlleur.php, qui peuvent chacun contenir plusieurs fonctions (init, index, mais aussi ajout(), maj(), ou autre).

Je vais par contre reprendre ton arbo globale :

/lib
   /Zend
   /Autre
/application
    /models
       +table.php
    /controller
        /questionnaire1
            +Etape1Controller.php ====> Fichier qui gere l'etape1
                  + indexAction()     ====> Fonction
                  + majAction()       ====> Fonction
            +Etape2Controller.php ====> Fichier qui gere l'etape 2
            +fichierspecifique.php             ====> Fichier spécifique pour le questionnaire 1
   /view
        /questionnaire1
            +etape1.tpl
            +etape2.tpl
        /questionnaire2
            +etape1.tpl
            +etape2.tpl
            +etape3.tpl

/public
    /css
    /img
    +index.php


Pour les url : http://adresse/questionnaire1/etape1/index ==> etape1 du module questionnaire1

Merci de ton aide.

Laurent



Edit :
Je viens de comprendre en fait, j'ai un niveau de profondeur en plus que toi Mr.MoOx il me semble.
Toi tu as un seul controlleur par questionnaire (questionnaire1Controller.php), qui a plusieurs fonctions (etape1, etape2, ...).
==> http://adresse/questionnaire1/etape1, http://adresse/questionnaire1/etape2

Moi de mon coté, j'ai plusieurs controlleurs par questionnaire, chaque controlleur correspondant à une etape.
Dans chacun de ces controlleurs, j'ai la fonction index par défaut, mais je peux mettre d'autres fonction spécifiques à une etape.

http://adresse/questionnaire1/etape1/index, http://adresse/questionnaire1/etape1/autreaction, http://adresse/questionnaire1/etape2/index, http://adresse/questionnaire1/etape2/encoreuneautre

laurent

Dernière modification par Saeba (06-02-2008 18:20:59)

Hors ligne

 

#8 07-02-2008 02:41:23

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

Re: Arborescence à utiliser

Bon si je reprends la doc :

Code:

// Régler plusieurs répertoires de modules d'un seul coup :
$front->setControllerDirectory(array(
    'default' => '../application/controllers',
    'blog'    => '../modules/blog/controllers',
    'news'    => '../modules/news/controllers',
));

// Ajouter le répertoire de module 'foo' :
$front->addControllerDirectory('../modules/foo/controllers', 'foo');

mais moi je souhaite utiliser ceci comme arborescence
/config
/controllers
/library
/models
/modules
    |__ Backoffice
                |_ controllers
                         |_ AccountController.php
                         |_ IndexController.php
    |__ Front
                |_ controllers

donc j'essaye de placer cela dans mon bootstrap :

Code:

    // setup controller
    $frontController = Zend_Controller_Front::getInstance();
    $frontController->throwExceptions(true);
    $frontController->setControllerDirectory(array(
        'backoffice'     => $global->path->root . 'modules/Backoffice/controllers/',
        'default'      => $global->path->root . 'controllers/Front/')
    );
    
    $frontController->addControllerDirectory($global->path->root . 'modules/Backoffice/controllers','backoffice');
    $frontController->setModuleControllerDirectoryName('controllers');
    $frontController->addModuleDirectory($global->path->root . 'modules/');

mais cela ne semble pas concluant lorsque je rentre cette adresse http://monserveurweb.fr/index.php/backoffice/:

array(3) {
  ["backoffice"] => string(60) "/home/http/modules/Backoffice/controllers"
  ["default"] => string(47) "/home/http/controllers/Front"
  ["Backoffice"] => string(60) "/home/http/modules/Backoffice/controllers"
}


Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("Backoffice_IndexController")' in /home/http/library/Zend/Controller/Dispatcher/Standard.php:300 Stack trace: #0 /home/http/library/Zend/Controller/Dispatcher/Standard.php(212): Zend_Controller_Dispatcher_Standard->loadClass('IndexController') #1 /home/http/library/Zend/Controller/Front.php(929): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #2 /home/http/index.php(116): Zend_Controller_Front->dispatch() #3 {main} thrown in /home/http/library/Zend/Controller/Dispatcher/Standard.php on line 300

Quelqu'un peu t-il me dépatouiller ou me mettre sur la voie...

Cordialement,
elkolonel

Dernière modification par elkolonel (07-02-2008 02:44:16)

Hors ligne

 

#9 07-02-2008 13:06:08

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Arborescence à utiliser

Si tu lis bien le message d'erreur (les 2 permières lignes suffisent), tu comprendras d'où viens le soucis.
Regarde la doc concernant le routage (par default) et aussi l'utiliseation des controllers (et donc des noms des controller quand ils sont dnas un module.

Hors ligne

 

#10 07-02-2008 13:51:15

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

Re: Arborescence à utiliser

Hello,

Alors quelques modifications s'imposent :
j'ai modifié l'arborescence comme suit :
/config
/controllers
/library
/models
/modules
    |__ Backoffice
                |_ controllers
                         |_ AccountController.php
                         |_ IndexController.php
                |_ views
                         |_ scripts
                                  |_ account
                                           |_ index.phtml
                                  |_ index
                                           |_ index.phtml
    |__ Front
                |_ controllers
                         |_ IndexController.php
                |_ views
                         |_ scripts
                                  |_ index
                                           |_ index.phtml

Modification du code du bootstrap :

Code:

    $frontController->setRouter($router);
    $frontController->setControllerDirectory(array(
        'Backoffice'     => $global->path->root . 'modules/Backoffice/controllers/',
        'default'        => $global->path->root . 'modules/Front/controllers/')
    );

Pour le Front, tout marche correctement. Par contre lorsque je tape :
version 1 : http://monserveurweb.fr/index.php/backoffice/ ou
version 2 : http://monserveurweb.fr/index.php/Backoffice/

Cela ne fonctionne pas. J'obtiens l'erreur suivante :
Pour la version 1

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (backoffice)'

Pour la version 2

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("Backoffice_IndexController")

Est ce mon url qui n'est pas formée correctement ou est ce un problème au niveau du bootstrap ??
Je rappelle que pour la partie Front tout fonctionne correctement.

Merci de votre assistance. En attendant je cherche ;-).
Cordialement,

Dernière modification par elkolonel (07-02-2008 14:05:52)

Hors ligne

 

#11 07-02-2008 14:29:21

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

Re: Arborescence à utiliser

Alors j'ai essayé différentes choses :

Code:

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

Code:

    $frontController->setRouter($router);
    $frontController->setControllerDirectory(array(
        'default'        => $global->path->root . 'modules/Front/controllers',
        'Backoffice'     => $global->path->root . 'modules/Backoffice/controllers'),'Backoffice'
    );

Mais rien n'y fait pour le moment. Je continue de lire la doc et d'essayer d'appliquer ce que j'y trouve, mais à mon avis pour le moment je fais fausse route ;-)
J'obtiens toujours les mêmes erreurs, la partie Front fonctionne toujours.

Cordialement,

Hors ligne

 

#12 07-02-2008 14:40:28

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

Re: Arborescence à utiliser

Je crois que je viens de trouver une piste intéressante :
http://framework.zend.com/manual/en/zen … irectories

Je creuse et je vous tiens au courant.

Cordialement,

Hors ligne

 

#13 07-02-2008 14:52:56

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Arborescence à utiliser

La classe présente dans ton fichier AccountController.php doit s'appeller Backoffice_AccountController, idem avec IndexController.php qui doit contenir la classe Backoffice_IndexController. C'est peut être ça.

Hors ligne

 

#14 07-02-2008 15:15:52

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

Re: Arborescence à utiliser

En effet, c'est ce que je viens de découvrir. J'avais complètement omis le mode de fonctionnement de ZF.
Toutefois, j'ai adapté mon bootstrap de l manière suivante :

Code:

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

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

Ensuite j'ai renommé mes répertoires de module afin qu'ils soient en minuscules (backoffice,front)

Et cela marche.

Merci beaucoup, mais c'est vrai qu'il faut bien formater son esprit et sa façon de voir dans la philosophie ZF.

Cordialement,

Hors ligne

 

#15 11-02-2008 18:48:53

Lio
Membre
Date d'inscription: 21-01-2008
Messages: 41

Re: Arborescence à utiliser

Bonsoir.

Je voulais juste relever le fait que le tableau pour la définitions des répertoires n'est pas nécessaire. D'autant plus que tu n'as qu'un seul répertoire smile

Code:

setControllerDirectory( '/path/to/controller/directory' );

Un détail smile

Cordialement,

Hors ligne

 

#16 16-02-2008 11:42:44

haffouff
Nouveau membre
Date d'inscription: 16-02-2008
Messages: 4

Re: Arborescence à utiliser

salut,
je travail sur un projet dont l'arboresence est semblable a la tienne c'est a dire un backoffice et frontoffice.
Voici mon arboresence :

-projet
  -application
     -model
       *Theme.php
       *Niveau.php
        ....     
    -modules
      -admin
         -controllers
            *IndexController.php
            *ThemeController.php
            *NiveauController.ph
             ....
          -views
             -scripts
                -index
                -niveau
                -theme
       -espace
         -controllers
            *IndexController.php
          -views
             -scripts
                -index
  -library
  -public
  -index.php


et donc le bootsrap j'ai mis ceci

Code:

$frontController->setControllerDirectory(array(
        'admin'     => './application/modules/admin/controllers',
        'default'      => './application/modules/espace/controllers',
        'espace'      => './application/modules/espace/controllers'));

mais seule l'url http://localhost/projet/ fonctionnne (elle me renvoi vers le module espace)
par contre l'url http://localhost/projet/espace me retourne cette erreur

Code:

Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("Espace_IndexController")

Et de meme pour l'url http://localhost/projet/admin

Code:

Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("Admin_IndexController")

Merci de m'aider

Hors ligne

 

#17 18-02-2008 11:01:34

haffouff
Nouveau membre
Date d'inscription: 16-02-2008
Messages: 4

Re: Arborescence à utiliser

alors pa de solution ??? sad

Hors ligne

 

#18 18-02-2008 11:04:37

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Arborescence à utiliser

Si, elle est plus haut dans le post. Lis bien.
Ou alors comprends ton message d'erreur qui est pourtant très simple.

Hors ligne

 

#19 18-02-2008 11:43:17

haffouff
Nouveau membre
Date d'inscription: 16-02-2008
Messages: 4

Re: Arborescence à utiliser

Mr.MoOx a écrit:

Si, elle est plus haut dans le post. Lis bien.
Ou alors comprends ton message d'erreur qui est pourtant très simple.

je suis encore un debutant dans zf et ca sera plus facile pour moi de m'aider a resoudre ce probleme sad

Hors ligne

 

#20 18-02-2008 11:49:13

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Arborescence à utiliser

Ton problème set le même que ici: http://www.z-f.fr/forum/viewtopic.php?pid=4387#p4387 (7 posts plus haut je donne la technique)

        -espace
         -controllers
            *IndexController.php

Dans un module les controllers doivent être préfixé par le nom du module, d'où ton erreur:
Invalid controller class ("Espace_IndexController")
Ton fichier doit bien s'appeller IndexController.php, mais la class à l'intérieur doit s'appeller Espace_IndexController.

Hors ligne

 

#21 18-02-2008 12:15:43

haffouff
Nouveau membre
Date d'inscription: 16-02-2008
Messages: 4

Re: Arborescence à utiliser

Merci beaucoup ca marche impeccablement big_smile

Hors ligne

 

#22 26-06-2008 09:41:36

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

Re: Arborescence à utiliser

J'ai encore une question d'arborescence smile
La répertoire 'application' peut on s'en passer ? (pas le contenu du répertoire, mais juste le contenant)
J'imagine que oui si le nécessaire est fait dans le bootstrap, cela dit, est ce que cela ne perturbe pas ensuite le fonctionnement du ZF ?

Cordialement,

Dernière modification par elkolonel (26-06-2008 09:42:09)

Hors ligne

 

#23 26-06-2008 10:31:10

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Arborescence à utiliser

Je ne vois pas pourquoi ça poserait problème. LE zf est un framework souple smile
Après le problème que je vois c'est que ça serait pas très bien rangé :p

Hors ligne

 

#24 26-06-2008 10:33:29

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

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