Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je voudrais lancer un petit débat quant à l’organisation de la structure MVC dans le cadre d’une application avec administration et consultation.
Le wiki de Zend propose une solution basée sur les modules. Chacun de ces modules offre un ou plusieurs contrôleurs de consultation, et d’administration.
L’inconvénient majeur de cette technique est de mélanger contrôleurs d’administration et de consultation par module. On pourrait y préférer une structure Administration/Module/Contrôleur/Action. Mais ceci n’est à ma connaissance pas prévue dans le Zend Framework. Peut être qu’un plugin permettrait d’étendre les fonctionnalités du contrôleur ?
J’avais, dans mes premiers essais avec le Zend Framework, sacrifié la gestion des modules, au sens application. J’avais donc un module pour gérer l’administration et l’autre la consultation, et enfin contrôleur + action. Mais je me rends compte que cette solution n’est pas idéale.
Celle de Zend offre une meilleure approche, mais je me demande du coup laquelle est la vôtre ? Si vous avez des liens proposant d'autres solutions que celle de Zend, je suis preneur
Hors ligne
Euh... Au vue du manque de réponse, j'ai dit une connerie ? Ou ma question n'est pas claire, pas pertinente ?
Dernière modification par jbarthe (25-04-2007 11:41:58)
Hors ligne
Je n'ai pas cette problèmatique vu que je n'ai pas de backoffice donc je me suis pas posé la question
Mais à première vue la solution d'un module backoffice et un frontoffice me parait bonne, pourquoi trouves tu cette solution pas idéale ?
Hors ligne
Pour être plus précis, je vais vous donner la structure actuelle de mon appli (ça nous fera une base de critique ) :
/app /config (contient les fichiers de configuration de l'application) /controllers /backend (module de controlleurs pour la partie admin) /frontend (module de controlleurs pour la partie consult) /models /views
Et donc dans mon index.php je charge les modules comme ceci :
$controller->setControllerDirectory(array( 'admin' => BASE_DIR.'/app/controllers/backend', 'default' => BASE_DIR.'/app/controllers/frontend') );
Ceci ne me convient pas vraiment car d'une part j'ai sacrifié la gestion des modules pour gérer une application, aussi je perd un niveau. En effet on considère plus un module comme le module Forum par exemple.
Le top pour moi aurait été un système comme symfony avec une découpe en :
Application/Module/Controlleur/Action
Je n'ai pas eu le temps de me pencher sur le Zend_Controller_Plugin_Abstract mais peut être qu'il permet de résoudre ce problème. Ou simplement en créant son propre contrôleur héritant de Zend_Controller_Action.
Le système présenté dans le wiki de Zend n'est pas mal du tout (cf. lien ci-dessus), mais j'ai l'habitude de séparer la partie admin et consult en 2 dossiers, ce qu'ils n'ont pas choisi.
Voilà, j'espère que ce sujet devient plus clair.
Dernière modification par jbarthe (25-04-2007 12:17:42)
Hors ligne
Justement en ce moment ce sont les questions que je me pose comment arriver à découper mon application en deux parties.
/admin(backend) /controllers /models /views /default(frontend) /controllers /models /views /config (contient les fichiers de configuration de l'application) /library index.php
Comme ça, on peut rajouter d'autres modules ou les récupérer pour d'autres programmes, vous en pensez quoi ?
Dernière modification par dinoxyz (25-04-2007 16:30:48)
Hors ligne
Dans mes applis, si j'ai une admin et un front, je n'ai qu'un seul modèle commun aux 2 sites.
Ca me parrait super important pour qu'ils papotent ensemble sans duppliquer des tonnes de code.
Par contre effectivement les controlleurs et les views sont spécifiques.
J'ai une arbo un peu "java like" qui ressemble à ça :
/admin index.php /PHP-INF /controlleurs /vues /front index.php /PHP-INF /controlleurs /vues /include /model /tests
et ma conf apache interdit l'accès à PHP-INF
A+, Philippe
Hors ligne
Merci pour ta réponse Philippe, effectivement ça parait être le plus simple et aussi le plus adapté
En fait, je voulais éviter d'avoir 2 index.php, car du coup tu dois initialiser Zend et ses composants sur 2 fichiers ? Néanmoins, ça permet de garder le contrôle sur chaque application et d'initialiser que les composants nécessaires à chaque application, ce qui est tout de même appréciable.
Le défaut de cette technique, c'est qu'il ne faut surtout pas oublier d'interdire l'accès à "PHP-INF". Et du dois gérer par apache, l'accès à nomdedomaine.com au dossier front, et nomdedomaine.com/admin/ au dossier admin, n'est ce pas ?
On peut j'immagine avoir une structure de ce style là :
/apps /backend /controllers /views ... /frontend /controllers /views ... /library /model /tmp /www /backend index.php ... /frontend index.php ... OU (Dans cette technique aucun controlleur de l'application frontend ne peut s'appeler "admin". Et il faut rajouter ceci "RewriteRule ^(admin).* - [L]" dans le fichier .htaccess pour rendre accessible admin) /www /admin index.php ... index.php ...
Qu'en pensez vous ?
Au passage, deux liens intéressants sur ce sujet :
Choosing Your Application's Directory Layout
Configuring Your URL Rewriter
Dernière modification par jbarthe (27-04-2007 12:12:29)
Hors ligne
Je reprend une peu la même idée que philippe,
Sauf que je n'ai pas encore rejoin les parties communes ( conf, modèle, etc..). Il y'a donc quelques doublons.
Projet
adm.projet.com
controllers
models
views
www.projet.com
controllers
models
views
Hors ligne
Pages: 1