IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Réécrire script procédural en architecture MVC


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut Réécrire script procédural en architecture MVC
    Bonjour à tous,

    Voici peu de temps que je me suis mis en-tête de lire des docs sur la structure MVC et la POO de php. Je ne vous cache pas que j'ai du mal à en cerner toutes les facettes bien qu'il me semble avoir compris le principe de l'OO pour la construction d'objet par le biais de class abstraite.

    Ceci étant ma question porte sur l'architecture MVC pour laquelle j'ai bien distingué les trois parties composantes, mais des questions subsistent, notamment comment externaliser (je suis pas sur que ce terme existe) une requête sql et le traitement avec php dans une boucle du résultat de la requête.

    Voila j'ai ce script procédural(view.message.php) mon modèle et ma vue pour l'instant fusionné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <table>
    <?php
    $rqt = mysql_query("SELECT * FROM matable");
    while($tab = mysql_fecth_array($rqt))
    {
    $id = $tab["id"];
    $message = $tab["message"];
    ?>
    <tr><td><?php echo $id; ?></td><td><?php echo $message; ?></td></tr>
    <?php
    }
    ?>
    </table>
    En supposant que l'index (controleur) de mon site est comme ci-dessous et que le module demandé est le module message:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    if (!empty($_GET['module'])) {
     
    $module = dirname(__FILE__).'/modules/'.$_GET['module'].'/';
     
    $action = (!empty($_GET['action'])) ? $_GET['action'].'.php' : 'index.php';
     
    if (is_file($module.$action)) {
     
    include $module.$action;
     
    } else {
    	include 'global/view.accueil.php';
    	}
     
    } else {
     
    	include 'global/view.accueil.php';
    }
    Comment séparer ma vue qui pour moi est la table "<table>"(view.message.php) du traitement php(controleur) qui pour moi est la requête et la boucle while ?

    Encore la j'ai fait simple c'est juste des lignes qui se mettent les unes en-dessous des autres, mais on peut même imaginer un tableau complexe avec des colonnes et des conditions pour le saut de ligne.

    En espérant avoir été explicite, merci à tous pour vos réponses.

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Salut,

    Tu peux essayer de faire du MVC par toi même pour éventuellement en comprendre le fonctionnement.
    Mais je te conseillerais plutôt d'utiliser un framework MVC simple, CodeIgniter par exemple. Une fois que tu auras utilisé le machin, il te sera plus aisé de comprendre les principes de MVC.

  3. #3
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    Merci pour ta réponse s.n.a.f.u,

    mais ça n'avance pas mon problème immédiat. J'ai pour habitude lors de mes démarches quand je rencontre une difficulté d'essayer de comprendre par le biais de docs ou de forum le cas échéant, plutôt que de rebrousser chemin pour emprunter une autre voie parallèle, à court terme tout au moins.

    As-tu éventuellement une autre réponse à m'apporter ?

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Je ne te proposais pas t'abandonner, mais plutôt de regarder ce qui se fait.

    En l'occurrence, CodeIgniter n'est pas une usine à gaz et il est assez facile d'en lire les sources pour comprendre le mécanisme choisi.

    Je dis bien choisi, car le MVC s'implémente de différentes façons.

    Sinon, tu peux aussi lire ceci, ça m'a l'air pas mal : http://tahe.developpez.com/web/php/mvc/?page=sommaire

  5. #5
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    Je te remercie je ne l'avais pas vue celui-ci.

    Je vais lire ça, je laisse le sujet ouvert voir si j'obtiens une réponse à mon interrogation.

    N'ayant pas trouvé de TP pour m'exercer, je reste ouvert à une correction de mes scripts ci-dessus, ça ne fera que m'aider pour passer de la théorie à la pratique.

    J'ai une question complémentaire, sommes-nous obligé de faire de POO pour une structure MVC, celle-ci ayant été réfléchi vers 1979 avec smalltalk bien que langage objet et sachant que le POO avec php est devenue plus complète à partir de php4 ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 28
    Par défaut
    Se lancer cash comme ça dans un MVC, c'est pas forcément facile.
    Plusieurs personnes sont revenues vers moi en me sortant "mais t'es malade !" après leur avoir conseillé d'utiliser Symfony...

    C'est sûr qu'il faut être motivé ! Dans ce que cas je ne peux que conseiller Symfony, mais c'est subjectif.

    Si c'est juste pour essayer d'avoir un code un peu plus clair, on peut simplement utiliser Smarty qui permet de faire la part des choses entre logique applicative (modèle et contrôleur) d'une part et la vue d'autre part.
    Mais c'est pas du MVC !

    Je me suis vu créer une sorte d'archi MVC à base de Smarty et de fichiers de conf YAML... c'est pas de la tarte mais c'est très formateur !

    EDIT :
    Je l'avais fait en procédural... même s'il y avait quelque classes, c'était très moche.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Par défaut
    Bonjour,

    Si je peux apporter une petite contribution qui vaut ce qu'elle vaut ...

    Je n'ai jamais utilisé de MVC tout fait, j'ai toujours travailler à la main (du moins, avec PHP). A cette époque, j'avais, pour ma vue, fait un fichier php contenant simplement une sorte de "template", contenant le html, le body, mes différentes div où étaient sensé se trouver mon texte, et dans ces div, l'affichage de variables que mon controleur remplissait.

    Page de la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html>
       <body>
          <div>
             <?php echo $text; ?>
          </div>
       </body>
    </html>
    Page du controleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if($cas1)
    {
       $text = "Je suis dans mon premier cas";
    }
    else if($cas2)
    {
       $text = "Je suis dans mon second cas";
    }
    etc...
    Bon, c'est une vision très simplifiée, mais c'est comme ça que j'avais séparé ma vue de mon controleur ...

    En espérant que ça ait pu t'aider, et que ce message n'était pas inutile.

    Bulldozer27350

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Citation Envoyé par bulldozer27350 Voir le message
    Bonjour,

    Si je peux apporter une petite contribution qui vaut ce qu'elle vaut ...

    Je n'ai jamais utilisé de MVC tout fait, j'ai toujours travailler à la main (du moins, avec PHP). A cette époque, j'avais, pour ma vue, fait un fichier php contenant simplement une sorte de "template", contenant le html, le body, mes différentes div où étaient sensé se trouver mon texte, et dans ces div, l'affichage de variables que mon controleur remplissait.

    Page de la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html>
       <body>
          <div>
             <?php echo $text; ?>
          </div>
       </body>
    </html>
    Page du controleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if($cas1)
    {
       $text = "Je suis dans mon premier cas";
    }
    else if($cas2)
    {
       $text = "Je suis dans mon second cas";
    }
    etc...
    Bon, c'est une vision très simplifiée, mais c'est comme ça que j'avais séparé ma vue de mon controleur ...

    En espérant que ça ait pu t'aider, et que ce message n'était pas inutile.

    Bulldozer27350
    tu as surtout séparer ton model (en anglais!! car ce n'est pas un modèle comme en français, un patron, gabarit) de ta vue, le contrôleur c'est celui qui fait le liant (entre autre chose), qui injecte ton model dans ta vue (le contexte d'exécution, du HTML et des variables).

Discussions similaires

  1. architecture mvc etxml/xsl
    Par kiko2005 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 14/08/2009, 14h52
  2. Architecture MVC & C++ Builder ?
    Par zi_omnislasher dans le forum C++Builder
    Réponses: 5
    Dernier message: 14/12/2006, 23h24
  3. Utiliser une architecture MVC
    Par misterniark dans le forum MVC
    Réponses: 5
    Dernier message: 03/11/2006, 22h35
  4. [Spring MVC] Architecture MVC dans spring
    Par Alec6 dans le forum Spring Web
    Réponses: 4
    Dernier message: 11/10/2006, 12h35
  5. Architecture MVC
    Par Bobleponge dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 20/06/2005, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo