Évoluer vers une architecture MVC en PHP Par Baptiste Pesquet Date de publicati
Évoluer vers une architecture MVC en PHP Par Baptiste Pesquet Date de publication : 27 mars 2013 Dernière mise à jour : 2 juillet 2015 Découvrez comment améliorer l'architecture d'un site Web, depuis une organisation classique vers une architecture MVC utilisant un framework créé de toutes pièces. Cet article est une adaptation d'un cours donné aux étudiants de seconde année de BTS SIO (Services Informatiques aux Organisations) au lycée La Martinière Duchère de Lyon. Tous les fichiers source sont disponibles sur le dépôt GitHub associé à l'article. IMPORTANT : cet article est à visée uniquement pédagogique. Le framework construit ici illustre certains principes de conception logicielle mais n'est pas destiné à une utilisation professionnelle. Si vous souhaitez découvrir comment intégrer un vrai framework PHP à vos développements, consultez ce cours. Commentez Évoluer vers une architecture MVC en PHP par Baptiste Pesquet - 2 - Le contenu de cet article est rédigé par Baptiste Pesquet et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com. http://bpesquet.developpez.com/tutoriels/php/evoluer-architecture-mvc/ I - Présentation du contexte d'exemple.......................................................................................................................4 I-A - Base de données...........................................................................................................................................4 I-B - Page principale.............................................................................................................................................. 4 I-C - Affichage obtenu............................................................................................................................................ 5 I-D - Critique de l'exemple..................................................................................................................................... 7 II - Mise en place d'une architecture MVC simple......................................................................................................7 II-A - Amélioration de l'exemple.............................................................................................................................7 II-A-1 - Isolation de l'affichage..........................................................................................................................7 II-A-2 - Isolation de l'accès aux données.........................................................................................................8 II-A-3 - Bilan provisoire.....................................................................................................................................9 II-B - Le modèle MVC............................................................................................................................................9 II-B-1 - Présentation..........................................................................................................................................9 II-B-2 - Rôles des composants.........................................................................................................................9 II-B-3 - Interactions entre les composants....................................................................................................... 9 II-B-4 - Avantages et inconvénients................................................................................................................10 II-B-5 - Différences avec un modèle en couches...........................................................................................10 II-C - Améliorations supplémentaires...................................................................................................................11 II-C-1 - Factorisation des éléments d'affichage communs............................................................................. 11 II-C-2 - Factorisation de la connexion à la base............................................................................................12 II-C-3 - Gestion des erreurs............................................................................................................................13 II-D - Bilan provisoire........................................................................................................................................... 14 II-E - Application : affichage des détails d'un billet.............................................................................................. 14 II-E-1 - Prise en compte du nouveau besoin................................................................................................. 14 II-E-2 - Affichage obtenu.................................................................................................................................16 III - Amélioration de l'architecture MVC.................................................................................................................... 17 III-A - Rappels sur l'architecture actuelle.............................................................................................................17 III-B - Mise en œuvre d'un contrôleur frontal (front controller)............................................................................ 17 III-C - Réorganisation des fichiers source........................................................................................................... 19 III-D - Bilan provisoire.......................................................................................................................................... 20 IV - Passage à une architecture MVC orientée objet............................................................................................... 20 IV-A - Aperçu du modèle objet de PHP.............................................................................................................. 20 IV-A-1 - Caractéristiques du modèle objet de PHP........................................................................................22 IV-A-2 - Spécificités du modèle objet de PHP............................................................................................... 22 IV-B - Mise en œuvre du modèle objet de PHP................................................................................................. 22 IV-B-1 - Rappels sur l'architecture actuelle....................................................................................................22 IV-B-2 - Passage à un Modèle orienté objet..................................................................................................23 IV-B-3 - Passage à une Vue orientée objet................................................................................................... 26 IV-B-4 - Passage à un Contrôleur orienté objet.............................................................................................28 IV-C - Bilan provisoire..........................................................................................................................................31 IV-D - Application : ajout d'un commentaire........................................................................................................ 32 IV-D-1 - Description du nouveau besoin........................................................................................................ 32 IV-D-2 - Prise en compte du nouveau besoin................................................................................................33 V - Construction d'un framework MVC......................................................................................................................34 V-A - Où aller maintenant ?................................................................................................................................. 34 V-A-1 - Intérêt d'un framework....................................................................................................................... 34 V-A-2 - Limites de l'architecture actuelle........................................................................................................35 V-B - Étapes de construction du framework........................................................................................................35 V-B-1 - Accès générique aux données.......................................................................................................... 35 V-B-2 - Automatisation du routage de la requête.......................................................................................... 38 V-B-3 - Mise en place d'URL génériques.......................................................................................................42 V-B-4 - Sécurisation des données reçues et affichées.................................................................................. 43 V-B-5 - Contraintes sur l'architecture du site................................................................................................. 44 V-C - Application : utilisation du framework sur le contexte d'exemple...............................................................45 VI - Conclusion et perspectives.................................................................................................................................46 VI-A - Bilan final................................................................................................................................................... 46 VI-B - Compléments.............................................................................................................................................47 VI-C - Pour aller encore plus loin........................................................................................................................ 48 VI-D - Liens utiles.................................................................................................................................................49 Évoluer vers une architecture MVC en PHP par Baptiste Pesquet - 3 - Le contenu de cet article est rédigé par Baptiste Pesquet et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com. http://bpesquet.developpez.com/tutoriels/php/evoluer-architecture-mvc/ VII - Remerciements..................................................................................................................................................49 Évoluer vers une architecture MVC en PHP par Baptiste Pesquet - 4 - Le contenu de cet article est rédigé par Baptiste Pesquet et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com. http://bpesquet.developpez.com/tutoriels/php/evoluer-architecture-mvc/ I - Présentation du contexte d'exemple Nous mettrons en œuvre les principes présentés dans cet article sur un exemple simple : une page Web PHP de type « blog » puisant ses informations dans une base de données relationnelle. Vous trouverez les fichiers source du contexte initial à l'adresse https://github.com/bpesquet/MonBlog/tree/sans- mvc I-A - Base de données La base de données utilisée est très simple. Elle se compose de deux tables, l'une stockant les billets (articles) du blog et l'autre les commentaires associés aux articles. Cette base de données contient quelques données de test, insérées par le script SQL ci-dessous. insert into T_BILLET(BIL_DATE, BIL_TITRE, BIL_CONTENU) values (NOW(), 'Premier billet', 'Bonjour monde ! Ceci est le premier billet sur mon blog.'); insert into T_BILLET(BIL_DATE, BIL_TITRE, BIL_CONTENU) values (NOW(), 'Au travail', 'Il faut enrichir ce blog dès maintenant.'); insert into T_COMMENTAIRE(COM_DATE, COM_AUTEUR, COM_CONTENU, BIL_ID) values (NOW(), 'A. Nonyme', 'Bravo pour ce début', 1); insert into T_COMMENTAIRE(COM_DATE, COM_AUTEUR, COM_CONTENU, BIL_ID) values (NOW(), 'Moi', 'Merci ! Je vais continuer sur ma lancée', 1); I-B - Page principale Voici le code source PHP de la page principale index.php de notre blog. index.php <!doctype html> <html lang="fr"> <head> <meta charset="UTF-8" /> <link rel="stylesheet" href="style.css" /> <title>Mon Blog</title> </head> <body> <div id="global"> <header> <a href="index.php"><h1 id="titreBlog">Mon Blog</h1></a> <p>Je vous souhaite la bienvenue sur ce modeste blog.</p> </header> <div id="contenu"> Évoluer vers une architecture MVC en PHP par Baptiste Pesquet - 5 - Le contenu de cet article est rédigé par Baptiste Pesquet et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com. http://bpesquet.developpez.com/tutoriels/php/evoluer-architecture-mvc/ index.php <?php $bdd = new PDO('mysql:host=localhost;dbname=monblog;charset=utf8', 'root', ''); $billets = $bdd->query('select BIL_ID as id, BIL_DATE as date,' . ' BIL_TITRE as titre, BIL_CONTENU as contenu from T_BILLET' . ' order by BIL_ID desc'); foreach ($billets as $billet): ?> <article> <header> <h1 class="titreBillet"><?= $billet['titre'] ?></h1> <time><?= $billet['date'] ?></time> </header> <p><?= $billet['contenu'] ?></p> </article> <hr /> <?php endforeach; ?> </div> <!-- #contenu --> <footer id="piedBlog"> Blog réalisé avec PHP, HTML5 et CSS. </footer> </div> <!-- #global --> </body> </html> On peut faire les remarques suivantes : • cette page est écrite en HTML5 et utilise certaines nouvelles balises, comme <article> ; • elle emploie l'affichage abrégé <?= … ?> plutôt que <?php echo … ?>, ainsi que la syntaxe alternative pour la boucle foreach ; • elle utilise l'extension PDO de PHP afin d'interagir avec la base de données. Pour le reste, il s'agit d'un exemple assez classique d'utilisation de PHP pour construire une page dynamique affichée par le navigateur client. I-C - Affichage obtenu Une feuille de style CSS est utilisée afin d'améliorer le rendu HTML. Voici le code source associé. style.css /* Pour pouvoir utiliser une hauteur (height) ou une hauteur minimale (min-height) sur un bloc, il faut que son parent direct ait lui-même une hauteur déterminée (donc toute valeur de height sauf "auto": hauteur en pixels, em, autres unités...). Si la hauteur du parent est en pourcentage, elle se réfère alors à la hauteur du «grand-père», et ainsi de suite. Pour pouvoir utiliser un "min-height: 100%" sur div#global, il nous faut: - un parent (body) en "height: 100%"; - le parent de body également en "height: 100%". */ html, body { height: 100%; } body { color: #bfbfbf; background: black; font-family: 'Futura-Medium', 'Futura', 'Trebuchet MS', sans-serif; } h1 { color: white; } .titreBillet { margin-bottom : 0px; } Évoluer vers une architecture MVC en PHP par Baptiste Pesquet - 6 - Le contenu de cet article est rédigé par Baptiste Pesquet et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com. http://bpesquet.developpez.com/tutoriels/php/evoluer-architecture-mvc/ style.css #global { min-height: 100%; /* Voir commentaire sur html et body plus haut */ background: #333534; width: 70%; margin: auto; /* Permet de centrer la div */ text-align: justify; padding: 5px 20px; } #contenu { margin-bottom : 30px; } #titreBlog, #piedBlog { text-align: center; } Le résultat obtenu depuis un navigateur client est le suivant. Évoluer vers une architecture MVC en PHP par Baptiste Pesquet - 7 - Le contenu de cet article est rédigé par Baptiste Pesquet et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com. http://bpesquet.developpez.com/tutoriels/php/evoluer-architecture-mvc/ I-D - Critique de l'exemple Les principaux défauts de cette page Web sont les suivants : • elle mélange balises HTML et code PHP ; • sa structure est monobloc, ce qui rend sa réutilisation difficile. De uploads/Ingenierie_Lourd/ evoluer-architecture-mvc.pdf
Documents similaires
-
36
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 31, 2022
- Catégorie Heavy Engineering/...
- Langue French
- Taille du fichier 0.7349MB