Le modèle MVC et le contrôleur sous PHP par Julien Pauli (Tutoriels, article et

Le modèle MVC et le contrôleur sous PHP par Julien Pauli (Tutoriels, article et conférences PHP et developpement web) (Blog) Date de publication : 28/06/2007 Dernière mise à jour : 26/10/2007 De tous les motifs de conception (Design patterns), le motif MVC est sans doute celui sur lequel il y a le plus à dire. Je vais cependant rester simple, le but de cet article est de comprendre MVC, et pourquoi MVC ? Le modèle MVC et le contrôleur sous PHP par Julien Pauli (Tutoriels, article et conférences PHP et developpement web) (Blog) - 2 - Copyright © 2007 - Julien Pauli. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages et intérêts. http://julien-pauli.developpez.com/tutoriels/php/mvc-controleur/ I - Introduction II - Principe du modèle MVC III - Le frontController ou contrôleur frontal IV - Motif actionController V - Conclusions Le modèle MVC et le contrôleur sous PHP par Julien Pauli (Tutoriels, article et conférences PHP et developpement web) (Blog) - 3 - Copyright © 2007 - Julien Pauli. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages et intérêts. http://julien-pauli.developpez.com/tutoriels/php/mvc-controleur/ I - Introduction Le MVC tout comme l'orientation objet du code, semble être devenu un standard dans le developpement d'applications web, avec la réputation d'être une bonne pratique de conception. Cependant, trouver une definition exacte et précise du MVC semble impossible, notamment au regard de PHP, langage scripté interprété à chaque requête, à la différence de java avec qui on peut utiliser les threads. De nombreux Frameworks utilisent aujourd'hui MVC, car le but principal de ce motif est de séparer les couches logiques d'une application. Nous allons voir qu'il n'est pas toujours judicieux d'utiliser MVC, ce motif sera plutôt réservé aux sites touffus, dans lesquels beaucoup de redondances de code apparaissent en général, des sites souvent mis à jour, souvent remodelés. Dans le cadre d'une petite application web gentillette, la complexité en terme de code, apportée par MVC, ne sera pas justifiée. En revanche pour tout autre projet web, la séparation en plusieurs couches permet à différentes équipes de bosser chacune sur une couche, indépendamment des autres. Et c'est aussi un gros avantage lorsqu'une couche doit évoluer, sans que les autres n'en aient besoin. Voyons déjà un petit code : <?php $connect = mysql_connect('myserver', 'mylogin', 'mypassword'); mysql_select_db('myDB'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $news_id = $_POST['news_id']; mysql_query("INSERT INTO commentaires SET news_id='$news_id', auteur='".mysql_escape_string($_POST['auteur'])."', texte='".mysql_escape_string($_POST['texte'])."', date=NOW()" ); header("location: ".$_SERVER['PHP_SELF']."?news_id=$news_id"); exit; } else { $news_id = $_GET['news_id']; } ?> <html> <head> <title>Les news</title> </head> <body> <h1>Les news</h1> <div id="news"> <?php $news_req = mysql_query("SELECT * FROM news WHERE id='$news_id'"); $news = mysql_fetch_array($news_req); ?> <h2><?php echo $news['titre'] ?> postée le <?php echo $news['date'] ?></h2> <p><?php echo $news['texte_nouvelle'] ?> </p> <?php $comment_req = mysql_query("SELECT * FROM commentaires WHERE news_id='$news_id'"); $nbre_comment = mysql_num_rows($comment_req); ?> <h3><?php echo $nbre_comment ?> commentaires relatifs à cette nouvelle</h3> <?php while ($comment = mysql_fetch_array($comment_req)) {?> <h3><?php echo $comment['auteur'] ?> a écrit le <?php echo $comment['date'] ?></h3> <p><?php echo $comment['texte'] ?></p> <?php } ?> <form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>" name="ajoutcomment"> <input type="hidden" name="news_id" value="<?php echo $news_id?>"> <input type="text" name="auteur" value="Votre nom"><br /> <textarea name="texte" rows="5" cols="10">Saisissez votre commentaire</textarea><br /> Le modèle MVC et le contrôleur sous PHP par Julien Pauli (Tutoriels, article et conférences PHP et developpement web) (Blog) - 4 - Copyright © 2007 - Julien Pauli. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages et intérêts. http://julien-pauli.developpez.com/tutoriels/php/mvc-controleur/ <input type="submit" name="submit" value="Envoyer"> </form> </div> </body> </html> C'est volontairement simple et simplifié, peu sécurisé, ceci pour demeurer concis et clair, constat : tout le monde connaît un code comme celui-ci, et ça ne choquera personne. PHP est mélangé au sein du HTML, après tout c'est son but premier : langage préprocesseur. A la lecture du code, on comprend immédiatement ce à quoi il est destiné, c'est l'avantage. On appelle ça un traitement procédural. L'inconvénient, c'est que les couches sont mélangées. Dans le traitement d'informations sur le web, généralement on distingue 3 couches : le modèle qui gère la manière d'accéder aux données, la vue qui se charge de présenter des données, et le contrôle, c'est l'étape intermédiaire de sélection et fusion des données. On peut donc factoriser le code pour bien séparer ces 3 couches, voyez plutôt : mymodel.php <?php function dbconnect() { static $connect = null; if ($connect === null) { $connect = mysql_connect('myserver', 'mylogin', 'mypassword'); mysql_select_db('myDB'); } return $connect; } function get_news($id) { $news_req = mysql_query("SELECT * FROM news WHERE id='$news_id'",dbconnect()); return mysql_fetch_array($news_req); } function get_comment($news_id) { $comment_req = mysql_query("SELECT * FROM commentaires WHERE news_id='$news_id'",dbconnect()); $result = array(); while ($comment = mysql_fetch_array($comment_req)) { $result[] = $comment; } return $result; } function insert_comment($comment) { mysql_query("INSERT INTO commentaires SET news_id='{$comment['news_id']}', auteur='".mysql_real_escape_string($comment['auteur'])."', texte='".mysql_real_escape_string($comment['texte'])."', date=NOW()" ,dbconnect() ); } myview.php <html> <head> <title>Les news</title> </head> <body> <h1>Les news</h1> Le modèle MVC et le contrôleur sous PHP par Julien Pauli (Tutoriels, article et conférences PHP et developpement web) (Blog) - 5 - Copyright © 2007 - Julien Pauli. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages et intérêts. http://julien-pauli.developpez.com/tutoriels/php/mvc-controleur/ myview.php <div id="news"> <h2><?php echo $news['titre'] ?> postée le <?php echo $news['date'] ?></h2> <p><?php echo $news['texte_nouvelle'] ?> </p> <h3><?php echo $nbre_comment ?> commentaires relatifs à cette nouvelle</h3> <?php foreach ($comments AS $comment) {?> <h3><?php echo $comment['auteur'] ?> a écrit le <?php echo $comment['date'] ?></h3> <p><?php echo $comment['texte'] ?></p> <?php } ?> <form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>" name="ajoutcomment"> <input type="hidden" name="news_id" value="<?php echo $news_id?>"> <input type="text" name="auteur" value="Votre nom"><br /> <textarea name="texte" rows="5" cols="10">Saisissez votre commentaire</textarea><br /> <input type="submit" name="submit" value="Envoyer"> </form> </div> </body> </html> mycontroller.php <?php require ('mymodel.php'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { insert_comment($_POST); header("HTTP/1.1 301 Moved Permanently"); header("location: {$_SERVER['PHP_SELF']}?news_id={$_POST['news_id']}"); exit; } else { $news = get_news($_GET['news_id']); $comments = get_comments($_GET['news_id']); require ('myview.php'); } ?> Et voilà, on a appliqué le modèle MVC ;-) On a bien séparé le code en 3 couches distinctes, qui se connaissent l'une l'autre. Dans ce code-là, on peut facilement changer la manière d'accéder aux données (changer de SGBD, par exemple), sans pour autant se soucier le moins du monde de la présentation, ou de la manipulation future de ces données. Et nous n'avons pas utilisé la POO ;-). Voilà l'intérêt principal d'un modèle MVC : séparer les couches de conception, de manière à ce que plusieurs groupes de personnes puissent bosser chacun sur leur couche, sans même qu'ils connaissent les personnes qui bossent la couche du dessous (ou du dessus, ou d'à coté). Il n'est cependant pas toujours facile de bien distinguer les couches, et le motif MVC reste sans aucun doute un motif complexe, car, nous allons le voir, on peut fortement le complexifier, avec MVC2, mais les développeurs habitués à ce modèle apprécient particulièrement la lisibilité du code. 3 couches sont un minimum, MVC2 en implémente minimum 4, et on peut même en distinguer jusqu'à 5 voire 6 ou plus sur des gros projets. Mais comme toujours, la séparation des entités logiques, réalisable grace à la programmation orientée objet, simplifie et clarifie la conception d'un logiciel (et dans notre cas d'une application web). Il est plus facile de dire de quoi est constituée une vinaigrette, lorsque les ingrédients sont tous posés sur la table, plutot que d'essayer d'analyser leur mélange au fond du saladier. Il n'y a pas à proprement parler de nombre de classes défini, MVC est un design pattern architectural, c'est un ensemble de principes à suivre à l'intérieur duquel un grand nombre d'autres motifs de conception interviennent. On peut ainsi créer "plein de" motifs MVCs, chacun répondra à un problème particulier. Cependant la plupart du temps, les developpeurs utiliseront des modèles MVC déja écrits, dans des frameworks ayant fait leurs preuves. Le modèle MVC et le contrôleur sous PHP par Julien Pauli (Tutoriels, article et conférences PHP et developpement web) (Blog) - 6 - Copyright © 2007 - Julien Pauli. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages et intérêts. http://julien-pauli.developpez.com/tutoriels/php/mvc-controleur/ II - Principe du modèle MVC Le but de MVC est de séparer les couches d'une application (en 3 couches distinctes, au minimum, et le plus uploads/S4/ mvc-controleur.pdf

  • 27
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Sep 12, 2021
  • Catégorie Law / Droit
  • Langue French
  • Taille du fichier 0.1464MB