Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-05-2007 18:22:04

NicKy
Nouveau membre
Date d'inscription: 21-05-2007
Messages: 7

[MVC][0.9.3] Organisation de mon MVC

Bonjour,

Après une longue réflexion, je me suis décidé à utiliser zend framework en MVC. Seulement je n'arrive pas à concevoir le layout de mes fichiers.
J'ai un site principal qui regroupera plusieurs sites ->
domaine.com/jeu1/controller/action/
domaine.com/jeu2/controller/action

etc..
Chaque site ont les utilisateurs en commun par exemple. Mais certaines choses sont bien séparées (un admin par site)

Comment organiser mon MVC ?
Mon problème est que j'ai des actions en commun (comme se loguer) mais d'autres à part entière.

Autre chose, le MVC de zend est par défault paramétré pour prendre domaine.com/controller/action, dans mon cas j'ai plusieurs choses : domaine.com/controller/action (les pages communes à tous mes sites) et domaine.com/jeu1/controller/action

Helppppp
Merci smile

Dernière modification par NicKy (21-05-2007 19:18:17)

Hors ligne

 

#2 22-05-2007 00:39:22

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [MVC][0.9.3] Organisation de mon MVC

A la base il s'agit de domaine.com/module/controller/action , pour justement pouvoir créer des modules indépendants.
Ensuite on créer généralement un module qu'on nomme 'default', qui repertoriera des actions communes à tout le monde.
La démo montre un système de ce type, après, tout est modifiable à souhait.
Il ne faut pas oublier de bien réfléchir son application sur papier, diagrammes UMLs de tout type à l'appui, avant d'attaquer quoi que ce soit

Hors ligne

 

#3 22-05-2007 12:13:51

NicKy
Nouveau membre
Date d'inscription: 21-05-2007
Messages: 7

Re: [MVC][0.9.3] Organisation de mon MVC

voilà pourquoi je suis là smile
donc je vais utiliser domaine.com/module/controller/action et avoir comme module chacun de mes "jeux"
/default/
/jeu1/
jeu2/

parfait !

Autre chose, je suis confronté à un problème récurrent lorque j'utilise MVC :
j'ai une page /index/ qui fait appel à différents blocs, exemple :

header
menu gauche
contenu spécifique à index
dernières news
footer

L'index appel IndexController  : ok
l'action indexAction : ok
Je récupère les infos nécéssaires pour afficher mes blocs et appelle la vue : ok

maintenant j'ai une autre page /news/ qui appelle ce contenu :
header
menu gauche
contenu spécifique à news
dernières news
footer

Cette page appelle indexAction de newsController : ok
mais suis-je obligé de recoder les blocs en commun (dernières news par exemple) ?

Comment peut-on factoriser ?
Y-a-t-il moyen d'effectuer quelquechose de ce genre :
dans indexController, j'appelle newsController::lastNews()
mais dans ce cas comment gérer les vues ?

Merci de m'éclairer sur la bonne méthode à employer !
et Merci julien.

Hors ligne

 

#4 22-05-2007 13:54:35

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [MVC][0.9.3] Organisation de mon MVC

Et bien si on prend en compte le fonctionnement interne du déroulement d'une action dans le MVC de ZF, ca donne ca :
   1. front controller initialise les plugins, le router, et le dispatcher
   2. front controller execute routeStartup() pour tous les plugins qui lui sont envoyés
   3. front controller execute le routeur pour récupérer un objet $request correspondant à un module, controller, action
   4. front controller execute routeShutdown() pour tous les plugins qui lui sont envoyés
   5. front controller execute dispatchLoopStartup()  pour tous les plugins qui lui sont envoyés
   6. front controller entre dans la boucle de dispatching
         1. front controller marque {{$request}} comme dispatchée ( isDispatched() = TRUE )
         2. front controller execute preDispatch() pour tous les plugins qui lui sont envoyés
         3. front controller demande au dispatcher de dispatcher la requête $request
               1. dispatcher instancie le controlleur d'action
               2. dispatcher marque la requête $request comme dispatchée
               3. dispatcher execute dispatch() sur le controlleur d'action
                   1. le controleur d'action initialise execute son init()
                   2. le controleur d'action execute notifyPreDispatch() pour tous les helpers qui lui sont passés
                   3. le controleur d'action execute son preDispatch()
                   4. le controleur d'action execute la requête $action (PRINCIPAL)
                   5. le controleur d'action execute son postDispatch()
                   6. le controleur d'action execute notifyPostDispatch() pour tous les helpers qui lui sont passés
         4. front controller execute postDispatch() pour tous les plugins qui lui sont envoyés
         5. la boucle de dispatching recommence si la requête n'est pas marquée comme dispatchée (redirection)
   7. front controller execute dispatchLoopShutdown() pour tous les plugins qui lui sont envoyés
   8. front controller retourne $response ou l'affiche directement

T'as le choix je crois big_smile
Personnellement, j'utilise des plugins, et les preDispatch() / PostDispatch().
T'as aussi le initView() , dans lequel tu peux addScriptPath() pour chercher tes vues et les rendre ...

Le modèle MVC de ZF est extrêmement permissif, il regorge de DesignsPatterns ( Proxy, Decorator, Observer, Command ... ), qui facilitent grandement la modification de la logique interne préétablie, sans avoir necessairement besoin de dériver les classes de base.

Hors ligne

 

#5 22-05-2007 14:07:09

NicKy
Nouveau membre
Date d'inscription: 21-05-2007
Messages: 7

Re: [MVC][0.9.3] Organisation de mon MVC

Appliqué a mon exemple.. une page = un controller et chacun des "blocs" serait un plugin ?

Dernière modification par NicKy (22-05-2007 14:07:22)

Hors ligne

 

#6 22-05-2007 14:13:10

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [MVC][0.9.3] Organisation de mon MVC

Tu peux jouer avec les vues aussi ( en limitant le nombre de controlleurs )
Un exemple ici

Hors ligne

 

#7 22-05-2007 14:38:48

NicKy
Nouveau membre
Date d'inscription: 21-05-2007
Messages: 7

Re: [MVC][0.9.3] Organisation de mon MVC

J'avoue que ca me perturbe plus qu'autre chose, ma première idée serait plutôt d'utiliser des helpers .. par exemple View_Helper_lastNews() ?
A-t-on le droit de faire appel à une db dans les helpers ?
dans cet exemple-ci :
http://blog.astrumfutura.com/archives/2 … ttern.html
on mélange les données à un view_helper n'est-ce pas ?

je suis troubléééééééééé sad((

Hors ligne

 

#8 22-05-2007 15:03:56

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: [MVC][0.9.3] Organisation de mon MVC

Tu peux faire appel à un model depuis ton helper, en revanche c'est plus dans l'optique de quelque chose de générique et sans réel traitement : construire un select basé sur le contenu d'une table par exemple.

Sinon pour ta problématique de bloc du peux utiliser le _forward.

Dernière modification par Isilgawen (22-05-2007 15:07:41)

Hors ligne

 

#9 22-05-2007 15:20:05

NicKy
Nouveau membre
Date d'inscription: 21-05-2007
Messages: 7

Re: [MVC][0.9.3] Organisation de mon MVC

encore autre chose, toujours lié ..
est-ce que je dois inclure mes "blocs" dans la vue index.phtml ..?
exemple :
index.phtml :
<code>
<?php $this->render('includes/header.phtml'); ?>
<?php $this->render('includes/lastnews.phtml'); ?>
contenu spécifique à index
...
<?php $this->render('includes/un_autre_bloc.phtml'); ?>
<?php $this->render('includes/footer.phtml'); ?>
</code>

OU bien doit tout gérer dans les controller et rendre les vues les unes après les autres ??
mais j'arrive pas à voir comment ..

i'm more and more confused

[EDIT] Ok merci Isilgawen

Dernière modification par NicKy (22-05-2007 15:20:47)

Hors ligne

 

#10 22-05-2007 15:25:53

NicKy
Nouveau membre
Date d'inscription: 21-05-2007
Messages: 7

Re: [MVC][0.9.3] Organisation de mon MVC

Mais a à chaque fois que j'utilise le forward un render est appelé donc une vue ?
donc dans mon indexController::indexAction quand la render de index.phtml est appelé d'autres render ont été appelé auparavant .. alors que je veux que ces "blocs" soient inclus dans "au milieu" du index.phtml (pas avant ni après)

à moins que l'on puisse omettre u render ?

Hors ligne

 

#11 22-05-2007 15:45:06

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: [MVC][0.9.3] Organisation de mon MVC

hum j'ai du mal à comprendre ce que tu veux faire ....

Hors ligne

 

#12 22-05-2007 16:20:00

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [MVC][0.9.3] Organisation de mon MVC

LOL
Rappelez vous tout le monde : il n'existe pas de "THE design MVC". Chacun fait comme il l'entend.

Il faut éviter que la vue n'accède aux données, on appelle ca une approche 'pull' , mais ca couple beaucoup plus les classes ( il faut faire des schémas UML pour s'en rendre compte ;-) ). Personellement, je n'agit qu'en 'push', le controlleur accède aux données, et les envoie à la vue, qui ne connait pas la couche données.
Encore une fois : des exceptions sont possibles.

Je ne suis pas encore super au point sur MVC de ZF actuellement pour répondre à tout le monde, il faut beaucoup de temps pour se faire la main ^^

Utiliser MVC n'est pas facile, mais est très pratique dans le cadre d'une factorisation extrême du code; et chacun utilisera MVC comme il le sent

Hors ligne

 

#13 22-05-2007 16:58:22

NicKy
Nouveau membre
Date d'inscription: 21-05-2007
Messages: 7

Re: [MVC][0.9.3] Organisation de mon MVC

HEHE d'accord mais quand on débute le MVC, j'aimerai être orienté vers la bonne solution pour mon problème.

Quelle méthode utiliserai-tu pour faire ceci :
j'ai ma page /index/index/ qui doit include mes "blocs" récurrents sur plusieurs pages (exemple : un bloc dernière news ..etc)
J'ai également un header et un footer qui revient sur chaque page.

indexController::indexAction() est appellé
ensuite ? j'appelle d'autres controllers pour mes blocs récurrents ?
les vues sont appelés dans indx.phtml OU dans d'autres controllers ? (<- c'est surtout ca ma question finalement)

Dernière modification par NicKy (22-05-2007 17:43:07)

Hors ligne

 

#14 23-05-2007 14:08:38

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [MVC][0.9.3] Organisation de mon MVC

NicKy a écrit:

les vues sont appelés dans indx.phtml OU dans d'autres controllers ? (<- c'est surtout ca ma question finalement)

Comme tu veux !

Moi je les appelle dans mon main(), avec le frontcontroller; certains les appelleront depuis des controlleurs, d'autres directement dans la vue index.phtml.

Ca dépend en fait, de l'évolutivité de ton site. Si il va peu évoluer, l'héritage de vues est interessant et une approche pull peut s'avérer plus efficace et moins contraignante qu'une push.

En revanche s'il est amené à évoluer souvent, alors là il vaut mieux abstraire au maximum, et utiliser un controlleur spécial, ou toute autre méthode.

Edit> un petit post sympa qui propose une archi par plugins, hors boucle de dispatching : http://framework.zend.com/wiki/display/ … mail/27145

Dernière modification par Julien (23-05-2007 19:43:54)

Hors ligne

 

#15 30-05-2007 00:16:39

soulsauveur
Nouveau membre
Date d'inscription: 09-05-2007
Messages: 9

Re: [MVC][0.9.3] Organisation de mon MVC

Un tres bon article à propos de ce sujet, j'ouvre la discussion car je n'ai pas tout bien compris, biensur c'est tout en anglais, mais j'ai deja essayé quelque solutions c'est pas mal du tout.
Attention c'est en 5 parties
http://blog.astrumfutura.com/archives/2 … ttern.html

Hors ligne

 

#16 31-05-2007 11:28:11

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [MVC][0.9.3] Organisation de mon MVC

Ici aussi : http://framework.zend.com/wiki/display/ … mail/27145

C'est un débat qui fait rage dans les mailings lists actuellement sur ZF.
L'organisation de sa vue, avec des approches pull ou push.
Pour le pull, le blog cité au dessus de moi utilise le pattern composite, logique et interessant.
Dans les débat sur le site de ZF, il y a des bonnes idées de "two part view" aussi.

L'architecture logicielle n'a jamais été simple hein ;-)

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