[MVC] Structure

Structure [MVC] - PHP - Programmation

Marsh Posté le 13-04-2008 à 22:07:25    

Salut à tous,
 
Je suis actuellement en train de vouloir changer de méthodes pour coder mes sites... Actuellement, je réinventais la roue à chaque fois...
 
Maintenant, je souhaite donc utiliser un framework qui m'aidera entre-autre à faire les choses proporement. Je me suis donc tourné vers Code Igniter qui m'a l'air simple entre autre...
 
Le problème que j'ai maintenant est : Comment bien structurer mes vues / controlleurs.
 
Je souhaite faire un site de rencontre et voici donc ce que je souhaite avoir :
- Une page d'accueil ou l'utilisateur pourra
> S'identifier via un formulaire
> Accéder à diverses pages (aide, conditions générales, ...)
> Voir les derniers membres inscris etc...
- Une partie membre ou l'utilisateur pourra faire des recherches etc.
 
Je pensais donc faire une page "index" qui contienne tous mes liens et fassent des includes du formulaire d'inscription etc... En tout cas, c'est comme ca que j'aurai fait jusque la. Maintenant, je vois bien que cette méthode n'est plus adaptées...
 
Je souhaiterai donc savoir comment structurer ? Une vue par bout de code (header, formulaire d'inscription, footer, ...) ? Un fichier "global" qui appellerai tous les autres ?
 
Le problème se pose surtout au niveau des conditions. Par exemple, si l'utilisateur est connecté je dois inclure la page 1 sinon la page 2...
 
Pour info, j'ai code igniter...
 
Je vous remercie d'avance pour votre aide !


Message édité par bisol le 13-04-2008 à 22:08:14
Reply

Marsh Posté le 13-04-2008 à 22:07:25   

Reply

Marsh Posté le 16-04-2008 à 00:26:58    

Si tu veux te mettre a developper en utisant la méthode MVC, le mieux est peut etre d'en comprendre le principe non ? Car la vu tes questions ca ne semble pas franchement etre le cas.
 
Pour te former je te conseille l excellent tutorial symfony sur un projet "réel", ca devrait  t ouvrir les yeux quand à ton découpage (que tu dois penser par rapport a ton modèle de données et non par rapport a l'affichage souhaité dans tes pages ...) : http://www.symfony-project.org/askeet/1_0/

Reply

Marsh Posté le 20-04-2008 à 14:45:30    

J'ai bien regarder ce tutoriel mais je sèche encore sur pas mal de choses...
 
J'ai l'impression que leur site est tout construit par petit module (formulaire de login, dernières questions) mais que rien n'est relié entre eux. J'entend par la, je ne vois pas qu'est ce qui va décider si sur une page il veut afficher la liste des dernières questions + le formulaire de login ?
 
Merci

Reply

Marsh Posté le 20-04-2008 à 21:46:52    

Alors voici ce que j'ai réussi à faire pour l'instant...
 
- Découpage de mon site : Voici les différentes parties de mon site

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="description" content="<?= $description ?>" />
  6. <meta name="keywords" content="<?= $keywords ?>" />
  7. <link rel="stylesheet" type="text/css" href="<?= base_url(); ?>system/application/views/themes/default/css/style.css" />
  8. <script type="text/javascript" src="<?= base_url(); ?>system/application/views/themes/default/js/niftycube.js"></script>
  9. <title><?= $title ?></title>
  10. </head>
  11.     <div id="container">
  12.      <div id="top">
  13.          <?= $top ?>
  14.  </div>
  15.      <div id="col_gauche">
  16.          <?= $col_gauche ?>
  17.         </div>
  18.      <div id="col_droite">
  19.          <?= $col_droite ?>
  20.         </div>
  21.         <div id="footer">
  22.          <?= $footer ?>
  23.         </div>
  24.     </div>
  25. </html>


 
Bien sur, tout ce qui est dans colonne gauche et droite est bien sûr dynamique (formulaire de login, champ de recherche....).  
 
A votre avis, devrai-je donc :
1) Créer une vue qui contienne toute la colonne de gauche avec des if un peu partout vérifiant la provenance ? (puis même chose pour la droite)
2) Créer un contrôleur pour la colonne gauche ?
 
Je vous remercie d'avance pour votre aide...
 
Pas facile tout ca en tout cas :P

Reply

Marsh Posté le 21-04-2008 à 09:08:38    

et c'est où que tu causes de mvc, là? Nan parce-que le principe c'est de séparer les données de la présentation, au grand minimum...et là je ne vois pas grand chose à part une maquette html...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 18:16:19    

Oui ceci est ma maquette de départ. Après, si cette maquette de départ est bonne, est de partir sur le codage des contrôleurs / modèles de col_gauche / col_droite etc...  
 
Le problème, c'est que je ne vois pas trop comment commencer à coder tout ca justement. Un contrôleur pour la partie gauche ? Un contrôleur pour chaque petite partie ? Tout ca, sachant qu'il y a du contenu dynamique dedans (si la personne est inscrite, on affiche une box pour modifier son profil sinon on affiche la box de login) etc...

Reply

Marsh Posté le 21-04-2008 à 18:40:29    

bisol a écrit :


Le problème, c'est que je ne vois pas trop comment commencer à coder tout ca justement. Un contrôleur pour la partie gauche ? Un contrôleur pour chaque petite partie ?


 
Ca n'a pas de sens, ça. Dans MVC, le controleur ne sait pas qu'il y a une partie gauche ou une partie droite.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 18:42:32    

OK. Car je pensais partir comme ca :
 

Code :
  1. // Welcome Page
  2. function index() {
  3.  //Chargement des helpers
  4.  $this->load->helper('url');
  5.  //Passage de paramètres à la vue
  6.  $data = array(
  7.   'title' => 'XXXX - Rencontre c&eacute;libataire en Suisse Romande',
  8.   'description' => 'Site de rencontre pour la Suisse Romande. Enti&egrave;rement gratuit !',
  9.   'keywords' => 'site de rencontres, rencontre, rencontres, dating, speed dating, amour internet',
  10.   'top' => 'top',
  11.   'col_droite' => 'col_droite', //$this->load->view('navigation/nav_main','',true),
  12.   'col_gauche' => 'col_gauche',
  13.   'footer' => $this->load->view('common/footer','',true)
  14.  );
  15.  //Affichage de la vue (en passant les données)
  16.  $this->load->view('layout/main',$data);
  17. }


 
et à chaque fois charger mes fichier avec les load-> view...

Reply

Marsh Posté le 21-04-2008 à 19:22:24    

bah si ça te chante...mais tu te rends compte que du code déconnecté de tout comme ça ça ne signifie pas grand chose pour nous?:D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 19:40:38    

Faux
 
Rien ne t'empeche d'avoir N-controlleur WEB. De meme pour la vue avec Ajax et Ci ou on livre des quasi clients lourds.
 
Tout depend de ce qu'on orchestre , cf ext pour application sur navigateur.
 

Reply

Marsh Posté le 21-04-2008 à 19:40:38   

Reply

Marsh Posté le 21-04-2008 à 19:46:01    

supermofo a écrit :

Faux
 
Rien ne t'empeche d'avoir N-controlleur WEB. De meme pour la vue avec Ajax et Ci ou on livre des quasi clients lourds.
 
Tout depend de ce qu'on orchestre , cf ext pour application sur navigateur.
 


 
tu réponds à quoi, là?:D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 20:39:01    

Lol

 

La partie de ton message avec 1 controleur. Bon t'as pas tort mais ce n'est pas exact non plus.

 

Voila

Message cité 2 fois
Message édité par supermofo le 21-04-2008 à 20:40:28

---------------
Echange de 3000+ liens PR 3 -> 5, me pm urgent !
Reply

Marsh Posté le 21-04-2008 à 20:40:38    

supermofo a écrit :

La partie de ton message avec 1 controlatérale :D.


m'enfin dans quelle langue tu parles?[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 20:46:23    

supermofo a écrit :

La partie de ton message avec 1 controleur.

 

Ok, plus clair après correction.
Et pour MVC tu as le contrôleur, la vue, et le modèle. Je ne parlais pas d'une implémentation particulière. Et encore moins du web où je n'ai jamais vu d'implémentation correspondant vraiment à du MVC.


Message édité par skeye le 21-04-2008 à 20:48:35

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-04-2008 à 22:15:19    

Merci pour vos réponses... même si j'avoue être un peu perdu.
 
Je vais essayer de donner un peu + de détails...
 
Mon but est de faire un site style rencontre avec des gens qui peuvent s'inscrire et recherche d'autres personnes.... assez basique :) (bien-sur avec messagerie etc...) !
 
Donc pour l'instant, j'ai juste fait un contrôleur "Welcome" que j'ai chargé par défaut qui contient uniquement le code que je vous ai mis plus haut. Je sais ca ne fait pas beaucoup mais j'en suis au tout début et je veux partir sur de bonnes bases.... Donc d'après moi, ce contrôleur welcome, en fonction de la page à afficher (hors partie membre donc aide, conditions générales etc...) charge les différentes vues nécessaires. Malheureusement, ces vues peuvent être dynamique (si la personne s'est déjà connectée etc...). Et c'est avec tout ca que je sèche.
 
Voilà j'espère avoir donner assez de précisions, je vous en donnerai d'autres si nécessaire mais je sèche la :P !
 
Merci

Reply

Marsh Posté le 22-04-2008 à 11:19:38    

Je crois que n'a pas trop compris ce qu'est le MVU, le but n'est pas d'avoir plusieurs controleurs ou je ne sais quoi, le principe pour faire simple c'est :
 
- Le modéle traite les données, c'est le coeur même du script
- La vue, disons que c'est le systéme de template
- Le controleur, c'est la 1er partie, celle qui récupére la requéte HTTP et détermine ce que le script vas faire/afficher.
 
Ces 3 parties doivent être bien séparées dans ton script, on utilise donc des class pour le mettre en place et faire la jonction.
 
Dans un script php classique, la page PHP contiendra souvent les 3, tu y trouveras le controleur qui sera sous la forme d'un switch() par exemple, le modéle qui sera les fonctions php et enfin la vue sous la forme du code HTML. L'interet de cette méthode est d'éviter les répétitions de code et surtout faciliter grandement les modifcations/améliorations. Par exemple si tu voulais modifié la façon dont tu fait tes requétes mysql, avec du classique tu vas devoir les retoucher toutes, dans un systéme MVU, tu as juste a retoucher la fonction dans ta class mysql.
 
Les puristes trouveront surement à redire dans mon explication mais en gros et simplifié, le principe du MVU avec PHP c'est ca.

Reply

Marsh Posté le 22-04-2008 à 11:22:33    

masterpsx a écrit :


- La vue, disons que c'est le systéme de template
- Le controleur, c'est la 1er partie, celle qui récupére la requéte HTTP et détermine ce que le script vas faire/afficher.

 

Les puristes trouveront surement à redire dans mon explication

 

Effectivement. En MVC pur, tu mélanges la vue et le contrôleur, là. Le contrôleur ne devrait même pas savoir qu'il y a du http derrière, c'est le boulot de la vue de gérer l'interface utilisateur.

Message cité 1 fois
Message édité par skeye le 22-04-2008 à 11:22:38

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-04-2008 à 15:24:47    

skeye a écrit :


 
Effectivement. En MVC pur, tu mélanges la vue et le contrôleur, là. Le contrôleur ne devrait même pas savoir qu'il y a du http derrière, c'est le boulot de la vue de gérer l'interface utilisateur.


 
 
C'est bien le job du controlleur de recuperer les parametres de la requete, sinon je vois pas ou tu peux le faire ailleurs ...

Reply

Marsh Posté le 22-04-2008 à 15:29:20    

shurik'n a écrit :

C'est bien le job du controlleur de recuperer les parametres de la requete, sinon je vois pas ou tu peux le faire ailleurs ...


 
Non, c'est le boulot de la vue. Je parle de MVC en général, pas de l'implémentation qui en est faite dans les frameworks php.
L'interaction avec l'utilisateur fait partie de la vue.
Et les requêtes http sont clairement de l'interaction avec l'utilisateur.
En traitant les requêtes http dans le contrôleur tu le lies à une implémentation particulière de la vue.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 22-04-2008 à 15:37:48    

+1
 
dans la pratique c'est le role du dispatcher
http://tempdocs.cakephp.org/index_files/droppedImage.png

Reply

Marsh Posté le 22-04-2008 à 20:58:59    

Heu on est toujours en asynchrone la ?

 

Il n'y a pas a ma connaissance de méthode pour utiliser le MVC sur le protocole HTTP. Je reste rigide juste pour l'exemple.

 

Tout le problème est la: le Web demande du léger pas du RoR.

 


Message édité par supermofo le 22-04-2008 à 21:19:44

---------------
Echange de 3000+ liens PR 3 -> 5, me pm urgent !
Reply

Marsh Posté le 22-04-2008 à 22:21:19    

Ok je comprend un peu mieux.
 
Donc en gros ce que j'ai commencé à faire m'a l'air juste. Il faut maintenant que je m'amuse à faire mes if dans mes vues...
 
Merci j'avance déjà bien :)

Reply

Marsh Posté le 23-04-2008 à 00:54:01    

J'ai un peu avancé... Je pense que ceci ne va pas vous aider énormèment mais sait-on jamais :)  
 

Code :
  1. function index() {
  2.  //Chargement des helpers
  3.  $this->load->helper('url');
  4.  $this->load->helper('form');
  5.  //Passage de paramètres à la vue
  6.  $data = array(
  7.   'title' => 'XXXX - Rencontre c&eacute;libataire en Suisse Romande',
  8.   'description' => 'Site de rencontre pour la Suisse Romande. Enti&egrave;rement gratuit !',
  9.   'keywords' => 'site de rencontres, rencontre, rencontres, dating, speed dating, amour internet',
  10.   'top' => 'top',
  11.   'col_gauche' => 'col_gauche',
  12.   'col_droite' => $this->load->view('layout/form_login', '', true),
  13.   'col_droite' => $this->load->view('layout/form_recherche_rapide', '', true),
  14.   'footer' => $this->load->view('common/footer','',true)
  15.  );
  16.  //Affichage de la vue (en passant les données)
  17.  $this->load->view('layout/main',$data);
  18. }


 
Apparement code igniter n'aime pas trop ceci et ne me charge que le fichier "recherche_rapide". Je pensais pouvoir orgnaniser les vues de cette facon mais me parait raté.... :/
 
Suis-je donc en train d'aller dans la bonne direction ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed